不能用PRAGMA替换sqlite3参数?

时间:2011-09-11 11:49:57

标签: python sqlite

我正在尝试通过Python 2.6更改SQLite数据库的user_version,我尝试执行以下操作:

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

失败并出现以下错误:

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

我已经尝试了命名的替换方式(而不是问号),但也失败了同样的错误。

如果我在那里删除一个数字作为SQL字符串的一部分或使用Python的字符串操作,它一切正常,但我宁愿不做其中任何一个。

那么为什么这不起作用呢? 如何安全地将变量中的数字插入到此调用中?

1 个答案:

答案 0 :(得分:4)

只能对某些值进行参数化。甚至表和列名也不能参数化。您的实验显示编译指示值也无法参数化。

user_versionexpected to be an integer。 您可以使用字符串格式并使用

同时保护自己
cur.execute( "PRAGMA user_version = {v:d}".format(v=version) )

如果{v:d}不是整数,格式version将引发ValueError。