[英]How to read a table from INFORMATION_SCHEMA using SQL Alchemy?
[英]MySQL driver issues with INFORMATION_SCHEMA?
我正在尝试无堆栈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”查询到处散布我的代码。
肯定看起来像是驱动程序问题。 也许python驱动程序不支持DB前缀。
可以肯定的是,尝试其他方法:首先use INFORMATION_SCHEMA
,然后SELECT * FROM mydatabase.sometable
我终于找到了原因。
驱动程序只是在协议握手中回显了服务器功能标志,压缩除外:
## 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
达到目的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.