Python3 Sqlite3 - Как правильно избежать исполняемого скрипта? - PullRequest
0 голосов
/ 03 сентября 2018

У меня такой запрос:

PRAGMA encoding="UTF-8";
INSERT OR IGNORE INTO {0} ({1}) VALUES ({2});
UPDATE {0} SET {1} = "{2}" WHERE {1} = "{3}";

Я использую этот запрос для вставки и обновления. Но, как вы можете видеть, это многострочный запрос, поэтому мне нужно использовать функцию executetescript, в результате чего я не могу использовать такие заполнители, чтобы избежать инъекций:

PRAGMA encoding="UTF-8";
INSERT OR IGNORE INTO {0} ({1}) VALUES (?);
UPDATE {0} SET {1} = "?" WHERE {1} = "?";

Итак, есть ли обходной путь? Должен ли я изменить свой подход или избежать его без использования заполнителей? Если так, как я могу избежать этого, чтобы избежать возможных уколов? Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Избавьтесь от этой прагмы. Он имеет значение только при использовании до создания каких-либо таблиц в новой базе данных. Документация .

Тогда в ваших операторах INSERT и UPDATE просто используйте заполнители, как обычно. (К сожалению, нет возможности использовать заполнители для указания имени таблицы или столбца, просто значения, поэтому, если они не известны при написании запроса, вам придется придерживаться такого подхода к форматированию строк.)

0 голосов
/ 03 сентября 2018

Вы можете использовать форматирование строки.

command = """
PRAGMA encoding="UTF-8";
INSERT OR IGNORE INTO {0} ({1}) VALUES (?);
UPDATE {0} SET {1} = {} WHERE {1} = {};
""".format(var1, var2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...