2011-03-16 9 views
9

मैं डेटाबेस में मान डालने के लिए execemany का उपयोग करने का प्रयास कर रहा था, लेकिन यह मेरे लिए काम नहीं करेगा।मुझे ठीक से काम करने के लिए sqlite3 के लिए पाइथन की निष्पादन नहीं मिल सकती है

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 3 supplied.

हालांकि, जब मैं इस सूची में परिवर्तन, यह ठीक काम करता है:

clist = ["a", "b"] 
cursor.executemany("INSERT INTO myTable(data) values (?) ", clist) 

यह रूप में काम करता

clist = [] 
clist.append("abc") 
clist.append("def") 
clist.append("ghi") 
cursor.executemany("INSERT INTO myTable(data) values (?) ", clist) 

यह मैं निम्नलिखित त्रुटि देता है: यहाँ एक नमूना है अपेक्षित होना! मैं डेटाबेस में डेटा देख सकता हूँ। पहली सूची क्यों काम नहीं करती है और दूसरा क्या करता है?

(पीएस: यह सिर्फ एक नमूना है और वास्तविक कोड नहीं है। मैंने सादगी के लिए एक छोटा परीक्षण केस बनाया है)।

उत्तर

12

मैं क्या executemany के बारे में पता से, आप का मतलब है,

clist = [("abc",), ("def",), ("ghi",)] 
cursor.executemany("INSERT INTO myTable(data) values(?)", clist) 

या कुछ इसी तरह। मुझे स्क्लाइट के लिए वाक्यविन्यास पर उद्धरण न दें, मैंने इसे थोड़ी देर में ऐप में उपयोग नहीं किया है, लेकिन आपको टुपल्स (अधिक आम तौर पर पुनरावृत्तियों) की एक पुनरावृत्ति की आवश्यकता है।

यह त्रुटि आप हो रही है की तरह लग रहा है कि यह प्रत्येक स्ट्रिंग प्रदान कर रहे हैं के माध्यम से पुनरावृति करने के लिए कोशिश कर रहा है है, इसलिए अपने बयान की तरह काम करता है:

clist = [('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', 'i')] 

मैं नहीं जानता कि क्या अपने दूसरे प्रश्न है पूरा करने की कोशिश कर रहा है, लेकिन ऐसा लगता है कि यह एक अलग तालिका को संबोधित करता है, इसलिए मैं कोई स्कीमा जानकारी का अनुमान लगा रहा हूं, लेकिन यदि आप सिंगल कैरेक्टर स्ट्रिंग्स को मल्टीचार्टेर स्ट्रिंग में बदलते हैं, तो यह भी असफल हो जाएगा।

+0

वे दोनों एक ही टेबल थे। टाइपो के लिए मेरा बुरा। अब सवाल में फिक्स्ड। इसमें एक फ़ील्ड वाला एक साधारण टेबल है। – brainydexter

+0

हाँ ... मैंने अभी भी आपके दोनों प्रश्नों का उत्तर दिया है ... – marr75

+0

क्या आप फिर से दूसरी टिप्पणी के बारे में उस टिप्पणी को पोस्ट कर सकते हैं। मुझे लगता है, जिस व्यक्ति ने अपना जवाब पोस्ट किया था, उसे हटा दिया और इसके साथ चला गया। – brainydexter

5

बस संदर्भ पूरक: एक समय में एक टपल लेने के लिए करने के लिए

res = [("John", "2j4o1h2n"), ("Paula", "lsohvoeemsy"), ("Ben", "l8ers")] 

cur.executemany("INSERT INTO users (user, password) VALUES (?)", res) 

उम्मीद SQLite: एक निकट से संबंधित स्थिति में मैं एक मेज जैसे executemany का उपयोग करते हुए पाली tuples की एक सूची सम्मिलित करने के लिए होती (इसलिए एकल मान क्षेत्र में ? पैरामीटर-प्रतिस्थापन) और इसे बंटवारे अपनी समझाया विशेषताओं में (<username>, <password> इस मामले में), यह भी एक sqlite3.ProgrammingError अपवाद The current statement uses 1, and there are 2 supplied. साथ विफल रहा है, के रूप में SQLite अलग VALUES (...) क्षेत्र में गुण प्रतिस्थापित की उम्मीद । तो यह है कि यह ठीक करता है:

cur.executemany("INSERT INTO users (user, password) VALUES (?, ?)", res) 

यह एक तुच्छ मामले लेकिन एक छोटे से भ्रमित कर सकते हैं, मुझे आशा है कि यह मदद कर सकता है जो कोई भी अटक गया है।

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

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