"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > अनुक्रम बनाम स्ट्रिंग्स का उपयोग करते समय SQLite में पैरामीटर प्रतिस्थापन समस्याओं को कैसे हल करें?

अनुक्रम बनाम स्ट्रिंग्स का उपयोग करते समय SQLite में पैरामीटर प्रतिस्थापन समस्याओं को कैसे हल करें?

2024-11-08 को प्रकाशित
ब्राउज़ करें:913

How to Resolve Parameter Substitution Issues in SQLite When Using Sequences vs. Strings?

SQLite में पैरामीटर प्रतिस्थापन समस्याओं का निवारण

Python के साथ SQLite3 में पैरामीटर प्रतिस्थापन का उपयोग करते समय समस्याओं का सामना करना पड़ रहा है? यहां एक गहन जांच और एक समाधान है।

एसक्यूएल इंजेक्शन को रोकने के प्रयास में, '?' का उपयोग करके पैरामीटर प्रतिस्थापन उचित है. हालाँकि, इस दृष्टिकोण का उपयोग करते समय एक त्रुटि उत्पन्न हो सकती है। उदाहरण के लिए, निम्नलिखित कोड के साथ:

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

त्रुटि "sqlite3.ProgrammingError: आपूर्ति की गई बाइंडिंग की गलत संख्या" होती है, जो दर्शाता है कि कथन एक बाइंडिंग निर्दिष्ट करता है, जबकि आठ प्रदान किए गए हैं। यह समस्या डेटाबेस तालिका के आरंभिक निर्माण से उत्पन्न हुई है। डेटाबेस निर्माण के लिए जिम्मेदार मॉड्यूल में आठ बाइंडिंग होती हैं, जो बेमेल की ओर ले जाती हैं।

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()

इस विरोधाभास के पीछे का कारण कर्सर.execute() अपने दूसरे पैरामीटर को स्वीकार करने के तरीके में निहित है। एक स्ट्रिंग के बजाय, यह एक अनुक्रम की अपेक्षा करता है, लेकिन आप लंबाई आठ की एक स्ट्रिंग पास कर रहे हैं।

इस समस्या को सुधारने के लिए, कोड को निम्नलिखित में समायोजित करें:

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

यह संशोधन सुनिश्चित करता है कि पैरामीटर प्रतिस्थापन उद्देश्य के अनुसार काम करता है। हमेशा सुनिश्चित करें कि cursor.execute() को दिया गया दूसरा पैरामीटर SQL कथन में बाइंडिंग की निर्दिष्ट संख्या से मेल खाता है।

विज्ञप्ति वक्तव्य यह लेख यहां पुनर्मुद्रित है: 1729322897 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.कॉम से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3