2011-11-03 18 views
11

पर एक पाइथन कॉल में परिवर्तनीय लंबाई प्लेसहोल्डर कैसे प्राप्त करें SQL क्वेरी में परिवर्तनीय लंबाई प्लेसहोल्डर का उपयोग करने का कोई तरीका है?SQLite3

अभी एक 3-टपल के साथ, मैं कुछ इस तरह लिखना:

c.execute('SELECT * FROM table WHERE word IN (?, ?, ?)', tup) 

लेकिन क्या TUP लंबाई भिन्न हो सकता है, शायद एक 4-टपल या 2-टपल? क्या इस स्थिति में प्लेसहोल्डर का उपयोग करने के लिए कोई वाक्यविन्यास है? यदि नहीं, तो कोड लिखने का पसंदीदा तरीका क्या है?

उत्तर

12

आप इस तरह कुछ करने के लिए (अपने उदाहरण का उपयोग करने के लिए) होगा:

tup = ... # some sequence/tuple of unknown length 
sql = 'SELECT * FROM table WHERE word IN (%s)' % ', '.join('?' for a in tup) 
c.execute(sql, tup) 

इस तरह से आप गतिशील प्लेसहोल्डर सूची बना रहे हैं और SQL स्ट्रिंग स्वरूपण से पहले sqlite3 मॉड्यूल यह पार्स करता है बाहर।

+0

मुझे उम्मीद थी कि वहां था ?? या? * इस तरह की चीज़ के लिए संस्करण, लेकिन आपका सुझाव अच्छी तरह से करेगा। –

+3

मैं '', '.join ('? 'में एक टुप के लिए लिखूंगा,' as '', '.join ('? '* Len (tup)) ' – Duncan

+3

@ डंकन: इडुनो जो मुझे कम स्पष्ट लगता है अधिक संकेत शोर। जेनरेटर समझ अंग्रेजी – rossipedia

संबंधित मुद्दे