我使用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.
答案 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。