Django | Создать выполнение необработанного запроса таблицы с параметром запроса - PullRequest
0 голосов
/ 21 марта 2020

Может кто-нибудь сказать мне, что не так с моим синтаксисом? Уже 2 дня я пытаюсь получить достойный ответ по этому вопросу, но люди, которые просто дают мне минусовые баллы, или отсылают меня к Django документам, которые я уже прочитал https://docs.djangoproject.com/en/3.0/topics/db/sql/

tablename = '2020-10-table'
v_col = ["userID int(11)", "TID varchar(128)", "CID varchar(128)", "SID varchar(255)", "Timestamp bigint(20)", "LX int(10)", "LocY int(10)", "Width int(10)", "Height int(10)", "Tag varchar(512)"]

connection.execute("""CREATE TABLE IF NOT EXISTS `%s` %s""", [tablename, '( '+str(', '.join(v_col))+' )'])

Я продолжаю получать это:

MySQLdb._exceptions.ProgrammingError: (1064, "У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей MySQL версии сервера правильный синтаксис для использования рядом с '' (userID int (11), TI ......

Может кто-нибудь указать на мою проблему?

ОБНОВЛЕНИЕ:

Я понял, что Django внутренне обрабатывает мою строку как строку:

b"CREATE TABLE IF NOT EXISTS `'2020-10-table'` '(userID int(11), TID varchar(128), CID varchar(128), SID varchar(255), Timestamp bigint(20), LX int(10), LocY int(10), Width int(10), Height int(10), Tag varchar(512))'"

, что явно недопустимо sql?!?

Теперь я не знаю как действовать.

1 Ответ

0 голосов
/ 21 марта 2020

Во-первых, я думаю, что вам не следует использовать '% s', если эти кавычки вокруг% s, потому что это оставляет вашу базу данных свободной для sql атак внедрения

Во-вторых, я думаю, что вам нужно использовать соединение. курсор вот так:

with connection.cursor() as cursor:
      cursor.execute("""CREATE TABLE IF NOT EXISTS %s %s""", [tablename, '( '+str(', 
      '.join(v_col))+' )'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...