如何使用 pymysql 从多个 select 语句中获取结果

How to get a result from multiple select statements with pymysql

基本上,我有以下示例(假设 cur 来自有效连接):

>>> con =  pymysql.connect(<parameters go here>)
>>> cur = con.cursor()
>>> sql = "SELECT @a := 0; SELECT @a := @a+2; SELECT @a;"
>>> res = cur.execute(sql)
>>> res
1

如您所见,res return 是整数 1,这意味着 sql 进行得很顺利。但是,最后一个 select 应该 return 数字 2,我需要那个数字。

如果我运行这个代码(由@falsetru建议),我也没有得到我需要的东西:

>>> cur.execute(sql)
1
>>> cur.fetchall()
[{u'@a := 0': 0}]

我怎样才能找回它?是否可以不分隔 SQL 语句?

使用 Cursor.fetchone to get a single row, or Cursor.fetchmany/Cursor.fetchall 获取许多或所有结果行。

row = cur.fetchone()
a = row[0]

UPDATE Cursor.execute 执行单个 sql 语句,因此单独执行语句(通过将 sql 拆分为 ;

import pymysql
con =  pymysql.connect(user='root', password='root')
cur = con.cursor()
sql = "SELECT @a := 0; SELECT @a := @a+2; SELECT @a;"
for stmt in sql.split(';'):
    if stmt.strip():
        cur.execute(stmt)
row = cur.fetchone()
a = row[0]
print(a)  # => 2