2017-01-22 36 views
1

基本上多個SELECT語句的結果,我下面的例子(假設CUR來自一個有效的連接):如何從與pymysql

>>> 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

使用Cursor.fetchone可獲得單行或Cursor.fetchmany/Cursor.fetchall以獲取多個或全部結果行。

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

UPDATECursor.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 
+0

感謝。我擔心這是我唯一的選擇。在任何情況下,對於那些在這裏尋找IF的人,只有如果你必須多次執行相同的語句(這不是我的情況),你可以看看'cursor.executemany' – fiacobelli