दिलचस्प पोस्ट
संस्करण की आवश्यकता में टिल्ड-बड़ा-से (~>) का अर्थ है? एच 2 इन-मेमोरी डेटाबेस। तालिका नहीं मिली JSON डिकोडिंग में अरबी वर्ण सिद्धांत 2 के साथ कैस्केड हटाएं कैसे कॉटन बायनरी मोड के रूप में व्यवहार करने के लिए? एंड्रॉइड में होम और अन्य सिस्टम बटन को अक्षम कैसे करें? $ नोटेशन का उपयोग करते हुए डेटा फ्रेम स्तंभ का चयन करने के लिए स्ट्रिंग चर का उपयोग कैसे करें क्या एक .h फ़ाइल में जाना चाहिए? PHP में Excel में MySQL डेटा निर्यात करें कैसे एक कैनवास के अंदर एक UserControl खींचें एक्सेल में अवधि और स्थान के अलावा स्ट्रिंग से सभी गैर अल्फ़ान्यूमेरिक वर्ण कैसे निकालें? कस्टम UITabBar पृष्ठभूमि छवि आईओएस 5 और बाद में काम नहीं कर रहा है फ़ंक्शन में सरणी लौटें एक बार सभी के लिए, कैसे वापस सही ढेर में आवृत्तियों की स्थिति राज्य को बचाने के लिए? बाश में दिए गए समयबाह्य होने के बाद बाल प्रक्रिया को कैसे मार सकता है?

पैरामीटर के रूप में एसक्यूएल क्वेरी में अजगर सूची

मेरे पास एक अजगर सूची है, l का कहना है I

l = [1,5,8] 

मैं सूची के सभी तत्वों के डेटा प्राप्त करने के लिए एक एसक्यूएल क्वेरी लिखना चाहता हूं, कहते हैं

"स्टडन्स से नाम का चयन करें जहां id = | IN सूची में |"

मैं इसे कैसे दूं?

Solutions Collecting From Web of "पैरामीटर के रूप में एसक्यूएल क्वेरी में अजगर सूची"

उत्तर अभी तक एक सादा एसक्यूएल स्ट्रिंग में मूल्यों को चकमा दे रहा है। यह पूर्णांक के लिए बिल्कुल ठीक है, लेकिन अगर हम इसे स्ट्रिंग के लिए करना चाहते हैं तो हम बचने वाले मुद्दे को प्राप्त करते हैं।

यहां पैरामीटरयुक्त क्वेरी का उपयोग करने वाला एक संस्करण है जो दोनों के लिए काम करेगा:

 placeholder= '?' # For SQLite. See DBAPI paramstyle. placeholders= ', '.join(placeholder for unused in l) query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders cursor.execute(query, l) 

आप चाहते हैं कि एसक्यूएल है

 select name from studens where id in (1, 5, 8) 

यदि आप अजगर से इस का निर्माण करना चाहते हैं तो आप उपयोग कर सकते हैं

 l = [1, 5, 8] sql_query = 'select name from studens where id in (' + ','.join(map(str, l)) + ')' 

मानचित्र फ़ंक्शन सूची को स्ट्रिंग्स की सूची में बदल देगा, जो कि str.join विधि का उपयोग करके कॉमा द्वारा एक साथ चिपका सकते हैं।

वैकल्पिक रूप से:

 l = [1, 5, 8] sql_query = 'select name from studens where id in (' + ','.join((str(n) for n in l)) + ')' 

अगर आप मानचित्र फ़ंक्शन में जनरेटर अभिव्यक्ति पसंद करते हैं।

अद्यतन: एस। लोटे ने टिप्पणियों में उल्लेख किया है कि पायथन एसक्यूलाइट बाइंडिंग अनुक्रमों का समर्थन नहीं करते हैं। उस स्थिति में, आप चाहते हो सकता है

 select name from studens where id = 1 or id = 5 or id = 8 

द्वारा उत्पन्न

 sql_query = 'select name from studens where ' + ' or '.join(('id = ' + str(n) for n in l)) 

इसे जटिल मत करो, इसके लिए समाधान सरल है।

 l = [1,5,8] l = tuple(l) params = {'l': l} cursor.execute('SELECT * FROM table where id in %(l)s',params) 

यहां छवि विवरण दर्ज करें

मुझे आशा है कि यह मदद की !!!

स्ट्रिंग। अल्पविरामों द्वारा अलग किए गए सूची मूल्यों को शामिल करें, और एक क्वेरी स्ट्रिंग बनाने के लिए प्रारूप ऑपरेटर का उपयोग करें।

 myquery = "select name from studens where id in (%s)" % ",".join(map(str,mylist)) 

(धन्यवाद, ब्लैयर-कॉनराड )

मुझे बॉबंस का जवाब पसंद है:

 placeholder= '?' # For SQLite. See DBAPI paramstyle. placeholders= ', '.join(placeholder for unused in l) query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders cursor.execute(query, l) 

लेकिन मैंने यह देखा:

 placeholders= ', '.join(placeholder for unused in l) 

इसके साथ बदला जा सकता है:

 placeholders= ', '.join(placeholder*len(l)) 

मुझे यह अधिक सीधा लगता है अगर कम चालाक और कम सामान्य यहां l की लंबाई होना आवश्यक है (यानी किसी वस्तु को संदर्भित करें जो __len__ विधि परिभाषित करता है), जो कि समस्या नहीं होनी चाहिए। लेकिन प्लेसहोल्डर को एक भी अक्षर होना चाहिए। बहु-वर्ण प्लेसहोल्डर का समर्थन करने के लिए:

 placeholders= ', '.join([placeholder]*len(l)) 

@ आरोपित उत्तर के समाधान, क्योंकि यह एक तत्व ट्यूपल के साथ तोड़ दिया गया, चूंकि (1,) मान्य SQL नहीं है:

 >>> random_ids = [1234,123,54,56,57,58,78,91] >>> cursor.execute("create table test (id)") >>> for item in random_ids: cursor.execute("insert into test values (%d)" % item) >>> sublist = [56,57,58] >>> cursor.execute("select id from test where id in %s" % str(tuple(sublist)).replace(',)',')')) >>> a = cursor.fetchall() >>> a [(56,), (57,), (58,)] 

एसक्यूएल स्ट्रिंग के लिए अन्य समाधान:

 cursor.execute("select id from test where id in (%s)" % ('"'+'", "'.join(l)+'"')) 

उदाहरण के लिए, यदि आप SQL क्वेरी चाहते हैं:

 select name from studens where id in (1, 5, 8) 

व्हाट अबाउट:

 my_list = [1, 5, 8] cur.execute("select name from studens where id in %s" % repr(my_list).replace('[','(').replace(']',')') )