INFORMATION_SCHEMA에 MySQL 드라이버 문제가 있습니까?
-
06-07-2019 - |
문제
저는 Stackless Python용 동시 프레임워크를 시험해 보고 있습니다.여기에는 MySQL 드라이버가 포함되어 있으며 이전에 MySQLdb에서 제대로 실행되었던 일부 코드를 실행할 때 실패합니다.
내가 하고 있는 일:
사용자 이름/비밀번호/포트/데이터베이스와 함께 dbapi를 사용하여 MySQL 데이터베이스에 연결합니다.
실행 중
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
다음 메시지와 함께 실패합니다.
Table 'mydatabase.columns' doesn't exist
"mydatabase"는 1단계에서 지정한 데이터베이스입니다.
"USE mydatabase"를 실행한 후 MySQL 콘솔에서 동일한 쿼리를 수행하면 완벽하게 작동합니다.
네트워크 통신을 확인하면 다음과 같은 결과가 나타납니다.
>>>myusername
>>>scrambled password
>>>mydatabase
>>>CMD 3 SET AUTOCOMMIT = 0
<<<0
>>>CMD 3 SELECT * FROM INFORMATION_SCHEMA.COLUMNS
<<<255
<<<Table 'mydatabase.columns' doesn't exist
이것은 드라이버 문제입니까(MySQLdb에서 작동하므로)?아니면 이 방법으로 INFORMATION_SCHEMA를 쿼리할 수 없나요?
쿼리를 시도하기 전에 특정 "USE INFORMATION_SCHEMA"를 보내면 예상한 결과를 얻습니다.그러나 나는 코드 전체에 "USE" 쿼리를 뿌릴 필요가 없습니다.
해결책 2
드디어 이유를 찾았습니다.
드라이버는 압축을 제외하고 프로토콜 핸드셰이크에서 서버 기능 플래그를 다시 에코했습니다.
## concurrence/database/mysql/client.py ##
client_caps = server_caps
#always turn off compression
client_caps &= ~CAPS.COMPRESS
서버에 능력이 있기 때문에...
CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */
...해당 구문을 허용하지 말라고 서버에 다시 에코되었습니다.
첨가 client_caps &= ~CAPS.NO_SCHEMA
트릭을했습니다.
다른 팁
확실히 드라이버 문제인 것 같습니다.Python 드라이버가 DB 접두사를 지원하지 않을 수도 있습니다.
확실히 하기 위해 다른 방법을 시도해 보세요.첫 번째 use INFORMATION_SCHEMA
그런 다음 SELECT * FROM mydatabase.sometable