ميسكلدب :علامات الاقتباس المزدوجة التي تم تمريرها إلى الاستعلام

StackOverflow https://stackoverflow.com//questions/9685953

  •  13-12-2019
  •  | 
  •  

سؤال

أنا الحصول على جنون مع ميسكلدب !أنا أتابع بالضبط المستند الرسمي ولكن لدي خطأ مع التعليمات البرمجية :

DB_TABLE = "test"
cursor.execute("SELECT MAX(id) AS maxid FROM " + DB_TABLE)
print "***"
cursor.execute("SELECT MAX(id) AS maxid FROM %s" , (DB_TABLE,))

أحصل على الخطأ :

Traceback (most recent call last):
  File "dbscript.py", line 49, in <module>
    cursor.execute("SELECT MAX(id) AS maxid FROM %s" , (DB_TABLE,))
  File "build/bdist.macosx-10.7-intel/egg/MySQLdb/cursors.py", line 174, in execute
  File "build/bdist.macosx-10.7-intel/egg/MySQLdb/connections.py", line 36, in defaulterrorhandler
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''test'' at line 1")

من الواضح أن هناك مشكلة مع بعض الاقتباسات.يبدو أن أمري لإرسال خط مثل هذا إلى الخلية :

SELECT MAX(id) AS maxid FROM ''test''

كيف يمكنني تغيير الاقتباس المزدوج من قبل واحد ?

لقد جربت ما يلي :

DB_TABLE = 'test'
cursor.execute("SELECT MAX(id) AS maxid FROM %s" , [DB_TABLE])
cursor.execute("SELECT MAX(id) AS maxid FROM %s" , ("test",))

لكن لا شيء يعمل: (

هل كانت مفيدة؟

المحلول

cursor.execute("SELECT MAX(id) AS maxid FROM %s" , ("test",)) 

وفي تصريحات مماثلة ، فإن cursor.execute سوف تحل محل المعلمات سكل في ٪ ق.

ما تحتاجه هو شيء من هذا القبيل

sql = "SELECT MAX(id) AS maxid FROM %s" % ("test", )
cursor.execute(sql)

نصائح أخرى

لا يمكنك اسم الجدول المعلمات، لذلك عليك أن تطهره بنفسك واستخدام استبدال السلسلة في الاستعلام بدلا من ذلك.

إلى تعقيم اسم جدول في استعلام مع معلمات متعددة:

giveacodicetagpre.

في هذه المرحلة، سيعرض الاستعلام ك:

giveacodicetagpre.

بمجرد إنشاء مؤشراتك، استخدم الحالة المعلمة:

giveacodicetagpre.

الاستعلام الفعلي الذي سيقرأ فيه MySQL في ذلك الوقت هو:

giveacodicetagpre.

إذا حاولت تمرير اسم جدول دون تعقيمه، فستحصل على خطأ في بناء الجملة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top