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

如何将值列表作为绑定变量传入Python OracleDB游标的IN子句查询

实现Python OracleDB游标绑定列表到IN子句的两种方法

Oracle数据库无法直接将Python列表作为单个绑定变量传入IN子句,以下是两种安全且高效的实现方式:


方法一:使用MEMBER OF操作符(推荐,Oracle 12c+)

这是最符合Oracle绑定变量最佳实践的方式,驱动会自动处理列表到Oracle集合类型的转换。

步骤1:修改query.sql的SQL语句

SELECT * FROM table WHERE column1 MEMBER OF (:VALUE);

步骤2:Python执行代码

import oracledb
from pathlib import Path

# 替换为实际数据库信息
user = "你的用户名"
password = "你的密码"
dsn = "你的数据库DSN"

# 待传入的数值列表
list_of_values = ["value1", "value2", "value3"]

with oracledb.connect(user=user, password=password, dsn=dsn) as connection, \
     open(Path("./adhoc_sqls/query.sql").resolve(), "r", encoding="utf-8") as sql_file:
    cursor = connection.cursor()
    sql_query = sql_file.read()
    # 直接将列表作为绑定变量传入,参数名对应SQL中的:VALUE
    cursor.execute(sql_query, VALUE=list_of_values)
    # 获取并处理查询结果
    for row in cursor.fetchall():
        print(row)

方法二:动态生成绑定占位符(兼容旧版本Oracle)

如果你的Oracle版本不支持MEMBER OF,可通过动态生成与列表长度匹配的绑定占位符来实现。

步骤1:修改query.sql的基础模板

SELECT * FROM table WHERE column1 IN ({PLACEHOLDERS});

步骤2:Python执行代码

import oracledb
from pathlib import Path

# 替换为实际数据库信息
user = "你的用户名"
password = "你的密码"
dsn = "你的数据库DSN"

# 待传入的数值列表
list_of_values = ["value1", "value2", "value3"]

# 生成对应数量的绑定占位符,如":1, :2, :3"
placeholders = ", ".join([f":{i+1}" for i in range(len(list_of_values))])

# 读取基础SQL并替换占位符
with open(Path("./adhoc_sqls/query.sql").resolve(), "r", encoding="utf-8") as sql_file:
    sql_query = sql_file.read().format(PLACEHOLDERS=placeholders)

with oracledb.connect(user=user, password=password, dsn=dsn) as connection:
    cursor = connection.cursor()
    # 将列表直接传入,驱动会按顺序匹配占位符
    cursor.execute(sql_query, list_of_values)
    # 获取并处理查询结果
    for row in cursor.fetchall():
        print(row)

关键注意事项

  • 禁止直接将列表元素拼接进SQL字符串(如','.join(list_of_values)),这会引发SQL注入风险,且无法利用数据库缓存提升性能。
  • 若使用旧版驱动cx_Oracle,上述代码仅需将oracledb替换为cx_Oracle即可正常运行。
  • 若你的代码实际使用ODBC连接Oracle,方法二同样适用,只需调整连接方式为odbc.connect,绑定变量的传入逻辑保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:19:55