दिलचस्प पोस्ट
एंड्रॉइड: बटन क्लिक किए जाने पर कैमरा स्विच करें कैसे एक प्रक्रिया अंडे और .NET में अपने एसटीडीओटी पर कब्जा? हमें टीटीएफ, ईट, विफ़, एसवीजी, … एक फ़ॉन्ट-चेहरे में क्यों शामिल होना चाहिए LAN नेटवर्क पर किसी अन्य कंप्यूटर से स्थानीयहोस्ट (एक्सएमपीपी) तक पहुंच – कैसे करें? सी # में निलंबित प्रक्रिया निर्धारित करें कि किस JAR फाइल को एक वर्ग से है ऑनलाइन होने के बिना उपयोगकर्ता की दीवार को प्रकाशित करना / लॉग-इन में – ग्राफ़ एपीआई का उपयोग करके फेसबुक शेयरिंग "सामग्री-प्रकार: एप्लिकेशन / जेएसन; charset = utf-8 "वास्तव में मतलब है? त्रुटि: 10 $ डाइजेस्ट () पुनरावृत्तियों तक पहुंचे। निरस्त किया जा रहा! डायनेमिक सॉर्टबी पॉकेट के साथ प्रदान की गई यूआरआई योजना 'https' अमान्य है; अपेक्षित 'http' पैरामीटर का नाम: माध्यम से एक HTML लिंक से URL को निकालने के लिए नियमित अभिव्यक्ति मैं एंड्रॉइड में वेबव्यू पर ऑनक्लिक इवेंट कैसे प्राप्त कर सकता हूं? साक्षात्कार: क्या हम अमूर्त वर्ग को इन्स्तांत कर सकते हैं? टॉर पर पायथन urllib? एसडी कार्ड पर एसक्यूएलएट डाटाबेस को सीधे कैसे स्टोर करना है I

SQLite पैरामीटर प्रतिस्थापन समस्या

पायथन 2.5 के साथ SQLite3 का उपयोग करना, मैं एक सूची के माध्यम से पुनरावृत्त करने की कोशिश कर रहा हूं और आइटम के नाम के आधार पर डेटाबेस से किसी आइटम का वजन खींच सकता हूं।

मैंने "?" का उपयोग करने की कोशिश की पैरामीटर प्रतिस्थापन एसईएल इंजेक्शन को रोकने के लिए सुझाव दिया है लेकिन यह काम नहीं करता है। उदाहरण के लिए, जब मैं उपयोग करता हूं:

for item in self.inventory_names: self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", item) self.cursor.close() 

मुझे त्रुटि मिलती है:

sqlite3। प्रोग्रामिंग त्रुटि: बाइनिंग की गलत संख्या की आपूर्ति की। वर्तमान बयान 1 का उपयोग करता है, और वहां 8 आपूर्ति की जाती है।

मेरा मानना ​​है कि यह किसी तरह से डेटाबेस के प्रारंभिक निर्माण के कारण होता है; मैंने जो मॉड्यूल बनाया था, वास्तव में डीबी में 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 बंधन हैं जब मैं केवल एक फोन कर रहा हूं। मेरे द्वारा यह कैसे किया जा सकता है?

वेब के समाधान से एकत्रित समाधान "SQLite पैरामीटर प्रतिस्थापन समस्या"

Cursor.execute() विधि को दूसरी पैरामीटर के रूप में अनुक्रम की उम्मीद है। आप एक स्ट्रिंग की आपूर्ति कर रहे हैं जो 8 अक्षर लंबा हो।

इसके बजाय निम्न फ़ॉर्म का प्रयोग करें:

 self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", [item]) 

पायथन लायब्रेरी संदर्भ 13.13.3: sqlite3 कर्सर ऑब्जेक्ट्स ।

मैंने आधे दिन बिताया है यह समझने की कोशिश की कि ऐसा क्यों मुझे एक त्रुटि देगी:

 cursor.execute("SELECT * from ? WHERE name = ?", (table_name, name)) 

केवल यह पता लगाने के लिए कि टेबल के नामों को पैरामीटिज्ड नहीं किया जा सकता है । आशा है कि यह अन्य लोगों को कुछ समय बचाने में मदद करेगा।

cursor.execute तर्क। cursor.execute जो आपके द्वारा डेटाबेस में डाली गई मान का प्रतिनिधित्व करता है, वह एक ट्यूपल (अनुक्रम) होना चाहिए। हालांकि इस उदाहरण पर विचार करें और देखें कि क्या हो रहा है:

 >>> ('jason') 'jason' >>> ('jason',) ('jason',) 

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

 self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", (item,)) 

इसके अलावा cursor.execute को भी स्ट्रिंग के रूप में मान तर्कों को देना, (जो कि आप कर रहे हैं) उदाहरण में पहले मूल्यांकन में परिणाम और आपको मिलने वाले त्रुटि में परिणाम।

क्या आपने यह कोशिश की है? :

 for item in self.inventory_names: t = (item,) self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", t) self.cursor.close() 

cursor.execute () दूसरे पैरामीटर के रूप में अनुक्रम (सूची, ट्यूपल) की अपेक्षा करता है (-> डीडीएए)

उद्धरण (यह है कि पैरों का क्या अर्थ है?) क्या? मेरे साथ माता-पिता मेरे लिए काम करने लगते हैं मैं कोशिश कर रहा था (सचमुच) '?' लेकिन मुझे मिल रहा था

प्रोग्रामिंग त्रुटि: बाइनिंग की गलत संख्या की आपूर्ति। वर्तमान कथन 0 का उपयोग करता है, और वहां 1 की आपूर्ति की जाती है।

जब मैंने किया:

वास्तविकता से तथ्य का चयन करें जहां की कुंजी (?)

के बजाय:

तथ्यों से तथ्यों से कहां की '?'

इसने काम कर दिया।

यह कुछ अजगर 2.6 बात है?

वस्तुओं के प्रत्येक तत्व को ट्यूपल होना चाहिए नामों को मानते हुए ऐसा कुछ दिखता है:

 names = ['Joe', 'Bob', 'Mary'] 

आपको निम्न कार्य करना चाहिए:

 for item in self.inventory_names: self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", (item, )) 

(आइटम,) का उपयोग करके आप इसे स्ट्रिंग के बजाय एक ट्यूपल बना रहे हैं।

प्रयत्न

 execute("select fact from factoids where key like ?", "%%s%" % val) 

तुम कुछ भी लपेटो नहीं ? बिल्कुल, पायथन एसक्यूलाइट इसे सही ढंग से एक उद्धृत इकाई में परिवर्तित कर देगा।