MySQLDB: Двойные цитаты передавали в запрос
-
13-12-2019 - |
Вопрос
Я злюсь с MySQLDB!Я следую в точном официальном документе, но у меня есть ошибка с кодом:
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")
.
Очевидно, что есть проблема с некоторыми цитатами.Моя команда, похоже, отправляет строку в MySQL:
SELECT MAX(id) AS maxid FROM ''test''
.
Как я могу изменить двойную цитату одним?
I'В попробовал следующие:
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",))
.
и в аналогичных высказываниях генеракодицетагкод заменит параметры SQL в% s.
Что вам нужно, это что-то вроде этого
sql = "SELECT MAX(id) AS maxid FROM %s" % ("test", )
cursor.execute(sql)
. Другие советы
Вы не можете настроить имя таблицы, поэтому вы должны сами показывать его и использовать строку подстановки в запросе.
Для
query = "SELECT * FROM %s WHERE columnName = %s" % (tableName,'%s')
print(query)
.
На данный момент запрос будет отображаться как:
SELECT * FROM tableName WHERE columName = %s
.
Как только вы построили курсор, используйте параметризованное условие:
cursor.execute(query,(columnValue,))
.
Фактический запрос, который mysql будет прочитать тогда:
SELECT * FROM tableName WHERE columnName = columnValue
.
Если вы попытаетесь пройти в названии таблицы, не продемонстрируя его, вы получите синтаксическую ошибку.