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