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

时间:2017-01-22 03:53:44

标签: python mysql 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返回整数1,这意味着sql进展顺利。但是,最后一个选择应返回数字2,我需要该数字。

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

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

我该如何检索它?是否可以不分离SQL语句?

1 个答案:

答案 0 :(得分:2)

使用Cursor.fetchone获取单行,或使用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