2017-04-09 79 views
0

我試圖通過Python代碼打印SQL結果,其中我試圖從for循環傳遞where子句的不同謂詞。但代碼只取循環中的最後一個值並給出結果。爲Python中的where子句執行SQL

在下面的例子中,我有兩個不同的id值'aaa'和'bbb'。 id值='aaa'有4條記錄,id值='bbb'有2條記錄。 但下面的代碼只給我的id值='bbb'的結果不爲id值'aaa'

任何人都可以幫助確定我在做什麼錯誤?

import pymysql 

db = pymysql.connect(host="localhost", user="user1", passwd="pass1", db="db1") 

cur = db.cursor() 

in_lst=['aaa', 'bbb'] 

for i in in_lst: 
    Sql = "SELECT id, val, typ FROM test123 Where id='{inpt}'".format(inpt=i) 

print(Sql) 
cur.execute(Sql) 

records = cur.fetchall() 
print(records) 

db.close() 

我得到如下

C:\Python34\python.exe C:/Users/Koushik/PycharmProjects/Test20161204/20170405.py 
SELECT id, val, typ FROM test123 Where id='bbb' 
(('bbb', 5, '1a'), ('bbb', 17, '1d')) 

Process finished with exit code 0 

回答

0
import pymysql 

db = pymysql.connect(host="localhost", user="root", passwd="1234", db="sakila") 

cur = db.cursor() 

in_lst=['1', '2'] 

for i in in_lst: 
    Sql = "SELECT * FROM actor Where actor_id='{inpt}'".format(inpt=i) 
    print(Sql) 
    cur.execute(Sql) 
    records = cur.fetchall() 
    print(records) 

db.close() 

縮進是你的問題,請根據您的需要更新的代碼..

+0

是的,它只是縮進。這在Python語法中很奇怪。 –

0

在您for循環的結果,要格式化的sql語句來替換 「{} INPT」 與 「AAA」。但是,在您使用該值做任何事情之前,您立即用「bbb」版本覆蓋它。

你將需要:

  1. 商店的結果循環的下一次迭代前不知何故,然後對其進行處理的循環之外。
  2. 在循環內處理結果。

像下面這樣會給你包含從使用fetchall兩個結果(名單)電話:

import pymysql 

db = pymysql.connect(host="localhost", user="user1", passwd="pass1", db="db1") 

cur = db.cursor() 

in_lst=['aaa', 'bbb'] 
records = list() 
for i in in_lst: 
    Sql = "SELECT id, val, typ FROM test123 Where id='{inpt}'".format(inpt=i) 

    print(Sql) 
    cur.execute(Sql) 

    records.append(cur.fetchall()) 
print(records) 

db.close() 
+0

不,它仍然沒有返回aaa的值。在我看來,循環無法識別它是多線循環。它像循環一樣執行,因此print語句不打印id = aaa的sql。我怎麼能寫一個for循環python這將是多行(就像我們可以給{}) –