Python / SQLITE: как мне избежать команд / строк - PullRequest
2 голосов
/ 02 января 2012

Я хотел бы создать запрос к базе данных sqlite3 на python, а затем записать его в файл.

Я большой поклонник интерфейсов python для баз данных sql, которые AFAICT обертывают все вызовы, которые вы можете испортить с небольшим приятным '?' параметры, которые дезинфицируют / экранируют ваши строки для вас, но это не то, что я хочу. На самом деле я просто хочу подготовить и экранировать SQL-оператор - для этого мне нужно экранировать / заключать в кавычки произвольные строки.

Например:

query = "INSERT INTO example_table VALUES ('%s')",sqlite_escape_string("'")

Итак, запрос должен содержать: "INSERT INTO example_table VALUES ('' '')"

Обратите внимание, что в него вставлен дополнительный символ.

Эквивалентом PHP является sqlite_escape_string () Эквивалент Perl - это цитата DBI () Я чувствую, что у Python лучший общий интерфейс, но мне нужен запрос pre-exec.

1 Ответ

0 голосов
/ 06 января 2012

Когда вы используете SQLite, он не превращает параметризованные запросы обратно в текст.Он имеет API («привязки») и хранит значения отдельно.Запросы можно повторно использовать с разными значениями, просто изменив привязки.Это то, что лежит в основе кэша операторов.Следовательно, python / sqlite не поможет вам в том, что вы описываете.

То, что вы не описали, это то, почему вы хотите это сделать.Обычная причина - это какая-то форма отслеживания.Мой альтернативный интерфейс Python / SQLite (APSW) обеспечивает простую трассировку - вам даже не нужно прикасаться к своему коду, чтобы использовать его:

https://rogerbinns.github.io/apsw/execution.html#apsw-trace

SQLite также имеет API-интерфейс авторизатора, который позволяетВы накладываете вето на операции, выполняемые заявлением.Это также имеет побочный эффект, сообщая вам, какие операции в конечном итоге будет выполнять оператор.

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