Python ibm_db列表中的Where子句。

问题描述 投票:0回答:1

我正在使用Python读取一个csv文件中的名字,然后将这些名字合并到一个sql查询中。使用ibm_sql,我试图将列表变量放在一个sql查询中。WHERE 子句。WHERE IN (List)

我如何去引用名单 sampleWHERE 子句?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)
python sql python-3.x jupyter-notebook db2
1个回答
0
投票

考虑插值一个逗号分隔的qmarks列表。? (等于你在列表中的项目数)。然后,将你的列表作为参数传递给 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)
© www.soinside.com 2019 - 2024. All rights reserved.