簡體   English   中英

針對與Python不同的where子句執行SQL

[英]Execute SQL for different where clause from Python

我試圖通過python代碼打印SQL結果,在這里我試圖從for循環中傳遞where子句的不同謂詞。 但是代碼僅從循環中獲取最后一個值並給出結果。

在下面的示例中,我有兩個不同的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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM