数据库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_值
项生成正确的键