2009-11-29 4 views
0

Stackless Python의 Concurrence 프레임 워크를 시험하고 있습니다. 그것은 MySQL 드라이버를 포함하고 이전에 MySQLdb로 잘 돌아간 몇몇 코드를 실행할 때 실패합니다. 사용자 이름/암호/포트/데이터베이스 DBAPI 사용하여 MySQL 데이터베이스에 연결INFORMATION_SCHEMA에 MySQL 드라이버 문제가 있습니까?

  1. :

    내가 뭐하는 거지

    . 실행

  2. SELECT * FROM INFORMATION_SCHEMA.COLUMNS

이 메시지와 함께 실패합니다

Table 'mydatabase.columns' doesn't exist 

"하여 MyDatabase"는 MySQL은 같은 쿼리를 수행 할 때 내가 1 단계

에 지정된 데이터베이스입니다 콘솔에서 "USE mydatabase"를 실행하면 완벽하게 작동합니다. (이 MySQLdb에서 작동하기 때문에)

>>>myusername 
>>>scrambled password 
>>>mydatabase 

>>>CMD 3 SET AUTOCOMMIT = 0 
<<<0 

>>>CMD 3 SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
<<<255 
<<<Table 'mydatabase.columns' doesn't exist 

이이 드라이버 문제인가 :

이 같은 네트워크 통신 수익률 뭔가를 확인? 아니면 INFORMATION_SCHEMA를이 방법으로 쿼리 할 수 ​​없습니까?

쿼리하기 전에 특정 "USE INFORMATION_SCHEMA"를 보내는 경우 예상되는 결과가 나타납니다. 그러나 "USE"쿼리를 사용하여 코드 전체를 뿌리지 않아도됩니다.

답변

1

드디어 이유를 발견했다.

드라이버

은 압축을 제외하고, 다시 프로토콜 핸드 쉐이크의 서버 기능 플래그를 반복했다

서버 기능이 있기 때문에
## 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을 추가하면 트릭을 만들었습니다.

1

확실히 드라이버 문제인 것 같습니다. 어쩌면 파이썬 드라이버는 DB 접두사를 지원하지 않습니다.

은 그냥 확인하기 위해 다른 방법으로 주위를 시도 : 첫 번째 use INFORMATION_SCHEMA을 다음 SELECT * FROM mydatabase.sometable

+0

고맙습니다. 다른 방법을 시도해도 INFORMATION_SCHEMA와는 아무런 관련이 없다는 동일한 오류가 발생했습니다. – truppo

관련 문제