2013-09-27 56 views

回答

3

您需要使用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項目生成正確的密鑰。