आपको प्रत्येक मान के लिए 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 के लिए सही कुंजियाँ उत्पन्न करता है आइटम।