Не можете использовать подстановку параметров sqlite3 с PRAGMA? - PullRequest
8 голосов
/ 11 сентября 2011

Я пытаюсь изменить user_version базы данных SQLite через Python 2.6, и я попытался сделать следующее:

cur.execute( "PRAGMA user_version = ?" , (version,) )

Сбой из-за следующей ошибки:

    cur.execute( "PRAGMA user_version = ?" , (version,) )
sqlite3.OperationalError: near "?": syntax error

Я пробовал именованный стиль замещения (вместо вопросительных знаков), но он также не работает с той же ошибкой.

Если я добавлю число как часть строки SQL или использую строковые операции Python, все будет работать нормально, но я бы не стал делать ни один из них.

Так почему это не работает?
И как мне безопасно вставить номер из переменной в этот вызов?

1 Ответ

4 голосов
/ 11 сентября 2011

Параметризовать можно только определенные значения. Даже имена таблиц и столбцов не могут быть параметризованы. Ваш эксперимент показывает, что значения прагмы также не могут быть параметризованы.

user_version - это , ожидается, что это целое число . Вы можете использовать форматирование строки и одновременно защитить себя с помощью

cur.execute( "PRAGMA user_version = {v:d}".format(v=version) )

Формат {v:d} вызовет ValueError, если version не является целым числом.

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