我正在尝试通过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的字符串操作,它一切正常,但我宁愿不做其中任何一个。
那么为什么这不起作用呢? 如何安全地将变量中的数字插入到此调用中?
答案 0 :(得分:4)
只能对某些值进行参数化。甚至表和列名也不能参数化。您的实验显示编译指示值也无法参数化。
user_version
是expected to be an integer。
您可以使用字符串格式并使用
cur.execute( "PRAGMA user_version = {v:d}".format(v=version) )
如果{v:d}
不是整数,格式version
将引发ValueError。