python - 不能将 sqlite3 参数替换与 PRAGMA 一起使用?

标签 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 的字符串操作,它都可以正常工作,但我宁愿不做其中任何一个。

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

最佳答案

只有某些值可以参数化。甚至表名和列名也不能参数化。您的实验表明 pragma 值也无法参数化。

user_versionexpected 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/

相关文章:

python - Scrapy 不跟踪图像链接

python - 使用文件的python打印语句中的无效语法错误

mysql - 如何从表中选择第n行到第1行的数据集

php - 在Laravel中为sqlite db设置自定义路径

python - 如何防止 C 共享库在 python 的标准输出上打印?

python - 如何在Python中使用十六进制进行异或

java - 从 SQLite 打印下一行

android - 使用android在sqlite中自然排序字母数字值

python - 如何在pymc中实现简单的蒙特卡洛函数

c# - .net core 上的 sqlite 发布到 azure 失败