दिलचस्प पोस्ट
jquery UI combobox ONCHANGE क्रोम के एक्सटेंशन सामग्री स्क्रिप्ट से iframe सामग्री का उपयोग करें एंड्रॉइड: कुंजीपटल संपादन टेक्स्ट के साथ ओवरलैप्स (प्रिंससेंस के साथ) ASP.NET वैश्वीकरण में अपरिवर्तनीय संस्कृति को कैसे कॉन्फ़िगर करें? आवश्यकता के बीच अंतर, शामिल और need_once? क्यों PerThreadLifetimeManager इस उदाहरण में प्रयोग किया जाता है? DeploymentItem विशेषता के साथ समस्याएं इनपुट फ़ील्ड में वर्णों की संख्या सीमित करें मैट्रैट में दो वैक्टर से वेक्टरयुक्त कोड का उपयोग करने के लिए सभी जोड़े कैसे उत्पन्न करें? फ़ंक्शन पैरामीटर के लिए 'const' का उपयोग करें हाइबरनेट में एक-से-एक, कई-से-एक और एक-से-कई के लिए डिफ़ॉल्ट फ़ेच प्रकार प्रतिक्रिया में सीएसएस छद्म तत्व घातक त्रुटि: अपरिभाषित फ़ंक्शन पर कॉल करें mb_detect_encoding () क्या कोई कारण है कि पायथन स्ट्रिंग की स्ट्रिंग लम्बी विधि नहीं है? Jquery UI datepicker तिथियों की सरणी अक्षम करें

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 बंधन हैं जब मैं केवल एक फोन कर रहा हूं। मेरे द्वारा यह कैसे किया जा सकता है?

Solutions Collecting From Web of "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) 

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