无法在官方 MySQL 连接器中获得所需的输出
Posted
技术标签:
【中文标题】无法在官方 MySQL 连接器中获得所需的输出【英文标题】:Can't get the desired output in the official MySQL connector 【发布时间】:2013-07-03 22:17:57 【问题描述】:我使用 Python 连接到 MariaDB。我最近从 this page 从 Pymysql 切换到本机连接器,但我无法使用这个简单的代码:
a = mysql.connect(host='127.0.0.1', port=3306, user='root', db='db', passwd='1337')
b = a.cursor()
b.execute('SELECT * FROM accounts', multi=True)
b.execute('SELECT * FROM profile', multi=True)
print(b.fetchall())
a.commit()
我以为它会打印 profile
表中的所有行,但由于某种原因它没有,并退出并出现以下错误
Traceback (most recent call last):
File "<file>", line 142, in <module>
print(b.fetchall())
File "/usr/local/lib/python3.3/dist-packages/mysql/connector/cursor.py", line 676, in fetchall
raise errors.InterfaceError("No result set to fetch from.")
mysql.connector.errors.InterfaceError: No result set to fetch from.
【问题讨论】:
如果您一次只执行一个查询,则不需要multi=True
。不过,我不明白您为什么要执行两个单独的查询。如果你只想要profile
表,那么你为什么还要accounts
表中的SELECT
ing 呢?
【参考方案1】:
如果您使用multi=True
参数,cursor.execute()
方法会返回一个可迭代对象,您应该使用它来获取结果。 section 8.3.4 of the documentation中有一个使用示例。
但是,如果您打算在单个查询中执行多个语句,则只需要使用它,例如...
iterable = b.execute('SELECT * FROM accounts; SELECT * FROM profile', multi=True)
for item in iterable:
print(item.fetchall())
...虽然这是PEP 249 的非标准扩展。
如果您只需要执行单个查询,那么省略multi
参数会简单得多...
b.execute('SELECT * FROM profile')
print(b.fetchall())
...符合 PEP 249。
【讨论】:
以上是关于无法在官方 MySQL 连接器中获得所需的输出的主要内容,如果未能解决你的问题,请参考以下文章
Spring配置JDBC连接OrcaleMySqlsqlserver
VS2013与MySql建立连接;您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧