有关INFORMATION_SCHEMA的MySQL驱动程序问题?
-
06-07-2019 - |
题
我正在尝试Stackless Python的Concurrence框架。它包含一个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 / *不允许database.table.column * /
...回复到服务器,告诉它不要允许这种语法。
添加 client_caps&amp; = ~CAPS.NO_SCHEMA
就可以了。
其他提示
这绝对看起来像是一个驱动程序问题。也许python驱动程序不支持数据库前缀。
可以肯定的是,尝试相反的方法:首先使用INFORMATION_SCHEMA
然后 SELECT * FROM mydatabase.sometable
不隶属于 StackOverflow