我使用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.
如果使用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())
尽管这是对PEP249的非标准扩展。
如果只需要执行一个查询,那么省略multi
参数会简单得多。。。
b.execute('SELECT * FROM profile')
print(b.fetchall())
其符合PEP 249。