gpt4 book ai didi

python - 数据库 API : How to deal with multi where condition in Python

转载 作者:搜寻专家 更新时间:2023-10-30 22:13:30 25 4
gpt4 key购买 nike

点赞这个问题passing-param-to-db-execute-for-where-in-int-list

但是多了where条件,怎么处理呢?

select * from tbl where params1='p1' and params2='p2' and params3 in ('v1', 'v2', v3')

如果我想使用 Python DB API 将 params1、params2、params3 传递给 SQL 语句,有什么建议吗?

顺便说一句:数据库是 Oracle

最佳答案

您需要为每个值使用 SQL 参数。

对于 in 语句,这意味着您需要生成参数:

sql = 'select * from tbl where params1=:params1 and params2=:params2 and params3 in ({})'.format(
', '.join(['params3_' + str(i) for i in range(len(params3_value))])

我假设 params3_value 是用于测试 params3 的值列表。如果 params3_value 是 3 个元素(如 ['v1', 'v2', 'v3']),那么生成的 SQL 将如下所示:

select * from tbl where params1=:params1 and params2=:params2 and params3 in (:params3_0, :params3_1, :params3_2)

然后将这些参数传递给 cursor.execute() 调用:

params = {'params1': params1_value, 'params2': params2_value}
for i, val in enumerate(params3_value):
params['params3_' + str(i)] = value
cursor.execute(sql, {params})

我在这里使用了 :name 命名的 SQL 参数样式,因为这是 cx_Oracle 使用的。请查阅您的数据库连接器文档以了解确切支持的参数样式。

:named 命名的 SQL 参数样式要求您将参数作为字典传入,因此上面的代码为 params3_value 项生成了正确的键。

关于python - 数据库 API : How to deal with multi where condition in Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19043987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com