문제

저는 Stackless Python용 동시 프레임워크를 시험해 보고 있습니다.여기에는 MySQL 드라이버가 포함되어 있으며 이전에 MySQLdb에서 제대로 실행되었던 일부 코드를 실행할 때 실패합니다.

내가 하고 있는 일:

  1. 사용자 이름/비밀번호/포트/데이터베이스와 함께 dbapi를 사용하여 MySQL 데이터베이스에 연결합니다.

  2. 실행 중 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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top