You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在cx_Oracle查询的IN子句中传递多个变量?

cx_Oracle 多值IN查询解决方案

方案1:数组绑定 + = ANY 操作符

cx_Oracle支持将Python列表/元组作为数组绑定到单个变量,只需把IN (:alist)替换为= ANY (:alist)即可:

target_list = ('12345a', '12345b')

cursor.execute('''
    select A.NUMBER, A.NAME
    from table_a A 
    where A.NUMBER = ANY (:alist)
''', alist=target_list)

results = cursor.fetchall()

方案2:动态生成绑定占位符

如果偏好原生IN语法,可根据值的数量动态生成对应占位符,再传入参数元组:

target_list = ('12345a', '12345b')
# 生成与值数量匹配的占位符,如两个值对应":1,:2"
placeholders = ', '.join([f':{i+1}' for i in range(len(target_list))])

sql = f'''
    select A.NUMBER, A.NAME
    from table_a A 
    where A.NUMBER in ({placeholders})
'''

cursor.execute(sql, target_list)
results = cursor.fetchall()

注意事项

  • 方案1无需拼接SQL,能避免SQL注入风险,是cx_Oracle推荐的多值查询方式。
  • 方案2通过动态生成绑定占位符而非直接拼接值,同样能保证安全性,逻辑更贴近Oracle原生写法。

内容的提问来源于stack exchange,提问作者LynChen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 09:25:27