您需要使用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)
然後通過這些PARAMATERS到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
項目生成正確的密鑰。