Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据库API:Python中如何处理多where条件_Python_Database_Oracle - Fatal编程技术网

数据库API:Python中如何处理多where条件

数据库API:Python中如何处理多where条件,python,database,oracle,Python,Database,Oracle,喜欢这个问题吗 但更何况,如何应对呢 select * from tbl where params1='p1' and params2='p2' and params3 in ('v1', 'v2', v3') 如果我想使用将params1、params2、params3传递给SQL语句,有什么建议吗 顺便说一句:数据库是Oracle您需要为每个值使用SQL参数 对于语句中的,这意味着您需要生成以下参数: sql = 'select * from tbl where params1=:para

喜欢这个问题吗

但更何况,如何应对呢

select * from tbl where params1='p1' and params2='p2' and params3 in ('v1', 'v2', v3')
如果我想使用将params1、params2、params3传递给SQL语句,有什么建议吗


顺便说一句:数据库是Oracle

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

对于语句中的
,这意味着您需要生成以下参数:

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\u value
是要测试
params3
的值列表。如果
params3\u值
是3个元素(如
['v1','v2','v3']
),则生成的SQL将如下所示:

select * from tbl where params1=:params1 and params2=:params2 and params3 in (:params3_0, :params3_1, :params3_2)
然后将这些参数传递给
游标。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\u Oracle
所使用的样式。有关确切支持的参数样式,请参阅数据库连接器文档

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