"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية حل مشكلات استبدال المعلمات في SQLite عند استخدام التسلسلات مقابل السلاسل؟

كيفية حل مشكلات استبدال المعلمات في SQLite عند استخدام التسلسلات مقابل السلاسل؟

تم النشر بتاريخ 2024-11-08
تصفح:476

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

استكشاف مشكلات استبدال المعلمات في SQLite

هل تواجه مشكلات عند استخدام استبدال المعلمات في SQLite3 مع Python؟ فيما يلي تحقيق متعمق وحل.

في محاولة لمنع حقن SQL، استبدال المعلمة باستخدام '?' من المستحسن. ومع ذلك، قد ينشأ خطأ عند استخدام هذا النهج. على سبيل المثال، باستخدام الكود التالي:

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

يكمن السبب وراء هذه المفارقة في الطريقة التي يقبل بها Cursor.execute () المعلمة الثانية الخاصة به. بدلاً من سلسلة واحدة، فإنه يتوقع تسلسلاً، ولكنك تقوم بتمرير سلسلة من طول ثمانية.

لتصحيح هذه المشكلة، قم بضبط التعليمات البرمجية على ما يلي:

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

يضمن هذا التعديل أن استبدال المعلمة يعمل على النحو المنشود. تأكد دائمًا من أن المعلمة الثانية التي تم تمريرها إلى Cursor.execute() تتوافق مع العدد المحدد من الارتباطات في عبارة SQL.

بيان الافراج أعيد طبع هذه المقالة على: 1729322897 في حالة وجود أي مخالفة، يرجى التواصل مع [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3