2

我使用 Python 连接到 MariaDB。我最近从这个页面从 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.
4

1 回答 1

5

如果您使用multi=True参数,该cursor.execute()方法将返回一个可迭代对象,您应该使用它来获取结果。文档的第 8.3.4 节中有一个使用示例。

但是,仅当您打算在单个查询中执行多个语句时才需要使用它,例如...

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。

于 2013-07-05T19:34:59.370 回答