【问题标题】:Python ibm_db List in the Where ClauseWhere 子句中的 Python ibm_db 列表
【发布时间】:2020-06-03 20:21:02
【问题描述】:

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

我将如何在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)

【问题讨论】:

    标签: python sql python-3.x jupyter-notebook db2


    【解决方案1】:

    考虑插入一个逗号分隔的 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)
    

    【讨论】:

      猜你喜欢
      • 2020-07-21
      • 2021-12-05
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2014-07-02
      • 2019-09-03
      相关资源
      最近更新 更多