Попытка очистить очень простой MySQL SELECT в Python / Django - PullRequest
0 голосов
/ 11 декабря 2018

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

query = "SELECT COL1 FROM A_TABLE %s"
queryUserInput = "WHERE COL1 = 'user input value'"
cursor.execute(query, (queryUserInput,))

Я получаю сообщение об ошибке:

1064 (42000): в синтаксисе SQL имеется ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '' WHERE ...

Верх стека: C: .. \ env \ lib \ site-packages \ mysql \ connector\ connection_cext.py в cmd_query

raw_as_string = raw_as_string)

Python 3.7 Django 2.1.3

Любой совет очень ценится.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

вы можете попробовать это:

queryUserInput = "user input value"
cursor.execute("SELECT COL1 FROM A_TABLE WHERE COL1 = %s", [queryUserInput])

и django doc:

Выполнение пользовательского SQL напрямую

0 голосов
/ 11 декабря 2018

Параметризация должна использоваться для сантитизации значения переменной, которое используется для формирования части законченного SQL - например, 7 в запросе, таком как SELECT * FROM user WHERE ID = 7.Вы не можете параметризовать целый раздел SQL так, как вы это делаете - и действительно, в этом не должно быть необходимости.

Я не знаю Python конкретно, но логически я думаю, что ваш код должен быть:

query = "SELECT COL1 FROM A_TABLE WHERE COL1 = %s"
queryUserInput = "user input value"
cursor.execute(query, (queryUserInput,))

для того, чтобы он только параметризовал фактический пользовательский ввод, а не какой-либо из SQL.

(Ваш исходный код выдаст строку SQL, похожую на SELECT COL1 FROM A_TABLE 'WHERE COL1 = \'user input value\'', которая явноSQL вообще не является допустимым, поскольку после A_TABLE все содержится в строковом литерале.)

В этой документации (метода execute ()) показаны некоторые другие примеры правильного использования: https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html

...