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

vau*_*tah 2 python mysql mysql-connector mariadb

我使用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()
Run Code Online (Sandbox Code Playgroud)

我认为它将打印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.
Run Code Online (Sandbox Code Playgroud)

Aya*_*Aya 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())
Run Code Online (Sandbox Code Playgroud)

......虽然这是PEP 249的非标准扩展.

如果你只需要执行一个查询,那么省略multi参数就简单得多了......

b.execute('SELECT * FROM profile')
print(b.fetchall())
Run Code Online (Sandbox Code Playgroud)

......符合PEP 249.