पायथन 2.5 के साथ SQLite3 का उपयोग करके, मैं एक सूची के माध्यम से पुन: प्रयास करने की कोशिश कर रहा हूं और आइटम के नाम के आधार पर डेटाबेस से किसी आइटम का वजन खींच रहा हूं।SQLite पैरामीटर प्रतिस्थापन समस्या
मैंने "?" का उपयोग करने की कोशिश की पैरामीटर प्रतिस्थापन एसक्यूएल इंजेक्शन को रोकने के लिए सुझाव दिया लेकिन यह काम नहीं करता है। उदाहरण के लिए, जब मैं का उपयोग करें:
for item in self.inventory_names:
self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", item)
self.cursor.close()
मैं त्रुटि मिलती है:
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 8 supplied.
मेरा मानना है कि यह किसी भी तरह डेटाबेस की प्रारंभिक निर्माण के कारण होता है; मॉड्यूल मैंने बनाया है जो वास्तव में डीबी बनाता है 8 बाइंडिंग करता है।
cursor.execute("""CREATE TABLE Equipment
(id INTEGER PRIMARY KEY,
name TEXT,
price INTEGER,
weight REAL,
info TEXT,
ammo_cap INTEGER,
availability_west TEXT,
availability_east TEXT)""")
हालांकि, जब मैं प्रत्येक आइटम नाम के लिए कम-सुरक्षित "% s" प्रतिस्थापन का उपयोग, यह सिर्फ ठीक काम करता है। इस तरह:
for item in self.inventory_names:
self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item)
self.cursor.close()
मुझे यह नहीं पता कि मुझे लगता है कि मेरे पास 8 बाइंडिन क्यों हैं जब मैं केवल एक कॉल कर रहा हूं। मेरे द्वारा यह कैसे किया जा सकता है?
कॉलम की संख्या बाइंडिंग की संख्या नहीं है। क्वेरी में "?" की संख्या बाइंडिंग की संख्या है। –
हाँ, मुझे पता है। मुझे लगा कि कोड किसी भी तरह से "निर्माण तालिका" कथन द्वारा संदर्भित बाइंडिंग का उपयोग करने का प्रयास कर रहा था। मुझे एहसास नहीं हुआ कि यह आइटम में अक्षरों की संख्या को संदर्भित करता है। – crystalattice