无法在官方MySQL连接器中获得所需的输出

时间:2013-07-05 18:49:03

标签: python mysql mariadb mysql-connector

我使用Python连接到MariaDB。我最近从PyMySQL切换到this page的本机连接器,我无法使用这个简单的代码:

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.

1 个答案:

答案 0 :(得分:5)

如果您正在使用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。