我正在尝试通过 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 的字符串操作,它都可以正常工作,但我宁愿不做其中任何一个。
那么为什么这行不通呢?
我如何安全地将变量中的数字插入到此调用中?
最佳答案
只有某些值可以参数化。甚至表名和列名也不能参数化。您的实验表明 pragma 值也无法参数化。
user_version
是 expected to be an integer .
您可以使用字符串格式并同时保护自己
cur.execute( "PRAGMA user_version = {v:d}".format(v=version) )
如果 version
不是整数,格式 {v:d}
将引发 ValueError。
关于python - 不能将 sqlite3 参数替换与 PRAGMA 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7377988/