Sqlite3: OperationalError: рядом с «TABLE»: синтаксическая ошибка - PullRequest
0 голосов
/ 26 июня 2019

Я получаю следующую ошибку при использовании sqlite3

OperationalError: около "TABLE": синтаксическая ошибка

Ошибка возникает в этой строке:

c.execute('INSERT TABLE IF NOT EXISTS ' + bracketName + ' (player_1 TEXT, player_2 TEXT, winner TEXT, loser TEXT, player_1_score INTEGER, player_2_score INTEGER, round TEXT)')

Поиск этой ошибки предполагает, что проблема возникает, когда «таблица» используется в качестве имени таблицы, несмотря на то, что она является зарезервированным словом. Это не так в моей ситуации, так как я называю таблицу тем, что хранится в переменной "скобка".

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

1 Ответ

3 голосов
/ 27 июня 2019

Как уже упоминалось в комментариях, команда для создания новой таблицы - CREATE TABLE.INSERT используется для создания новых строк в существующей таблице.Однако, насколько я могу судить (и в качестве комментария к вашему вопросу), вы не можете использовать подстановку параметров для имен таблиц.Следовательно, это будет работать:

c.execute('CREATE TABLE IF NOT EXISTS ' + bracketName + ' (player_1 TEXT, player_2 TEXT, winner TEXT, loser TEXT, player_1_score INTEGER, player_2_score INTEGER, round TEXT)')

Однако, как уже было отмечено, это не очень безопасно.Рисунок из Этот ответ : если вы беспокоитесь о внедрении, попробуйте написать функцию, которая очищает строку перед ее передачей.Этот ответ дает пример «уборщика», который будет передавать только буквенно-цифровые символы для энергичных атак с использованием инъекций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...