繁体   English   中英

MySQL驱动程序与INFORMATION_SCHEMA有关吗?

[英]MySQL driver issues with INFORMATION_SCHEMA?

我正在尝试无堆栈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”查询到处散布我的代码。

肯定看起来像是驱动程序问题。 也许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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM