Вопрос

Я злюсь с 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)
.

Другие советы

Вы не можете настроить имя таблицы, поэтому вы должны сами показывать его и использовать строку подстановки в запросе.

Для SINITINE Имя таблицы в запросе с несколькими параметрами:

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
.

Если вы попытаетесь пройти в названии таблицы, не продемонстрируя его, вы получите синтаксическую ошибку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top