簡體   English   中英

WHERE 子句中的 Python ibm_db 列表

[英]Python ibm_db List in the Where Clause

我正在使用 Python 讀取 csv 名稱文件,然后將這些名稱合並到 sql 查詢中。 使用 ibm_sql,我試圖將列表變量放在 sql WHERE子句中: WHERE IN (List)

我將如何 go 關於在WHERE子句中引用列表sample ?: WHERE a.name IN (sample)

#pip install ibm-db
import ibm_db_dbi as db

conn = db.connect("DATABASE=xxx;HOSTNAME=xxx;PORT=xxx;PROTOCOL=TCPIP;UID=xxx;PWD=xxx;", "", "")
with open('file.csv', newline='') as f:
    reader = csv.reader(f)
    next(reader, None) #skip header
    data = list(reader) #list
    sample = data[:20]

#sql
cursor = conn.cursor()
sql = '''
SELECT name
FROM (

SELECT DISTINCT a.name, b.number
FROM table1 as a
JOIN table2 as b ON a.sk = b.sk
WHERE a.name IN _____________ <<<
order by b.number
)
group by name
'''
 #{}.format(sample)
cursor.execute(sql)

for r in cursor.fetchall():
    print(r)

考慮插入一個逗號分隔的 qmark 列表, ? (等於您在列表中的項目數)。 然后,將您的列表作為參數傳遞給execute調用:

sql = '''SELECT name
         FROM (
             SELECT DISTINCT a.name, b.number
             FROM table1 as a
             JOIN table2 as b ON a.sk = b.sk
             WHERE a.name IN ({})
             ORDER BY b.number
         ) sub
         GROUP BY name
      '''

qmarks = ", ".join(['?' for i in sample])

cursor.execute(sql.format(qmarks), sample)

for r in cursor.fetchall():
    print(r)

暫無
暫無

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

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