python - SQLite 数据库不会使用 Python 变量进行更新
问题描述
我尝试使用以下代码行在 SQLite 数据库的表中使用变量更新(添加)名为“product_qty”的单元格的整数值
x = int(TOPUPQTY.get())
cursor.execute("UPDATE 'product' SET product_qty = product_qty + x WHERE `product_name` LIKE ?", ('%'+str(TOPUPPRODUCT_NAME.get())+'%',))
我有一个sqlite3.OperationalError: no such column: x
. 但是当我尝试x
用常量 say替换变量时30
,即:
cursor.execute("UPDATE 'product' SET product_qty = product_qty + 30 WHERE `product_name` LIKE ?", ('%'+str(TOPUPPRODUCT_NAME.get())+'%',))
这很好用,但我需要使用变量而不是常量。
解决方案
添加占位符“?” 对于字符串中的变量。
x = 30
cursor.execute(f"UPDATE product SET product_qty = product_qty + ? WHERE product_name LIKE ?", (x, '%'+str(TOPUPPRODUCT_NAME.get())+'%',))
您不应该自己将 x 放入字符串中,例如使用格式化字符串,因为如果 x 的内容来自不受信任的来源,您就有可能获得 sql 注入。所以最好总是依赖于 sqlite 包本身的格式。
推荐阅读
- java - 将一维数组复制到二维数组的一行
- javascript - Webpack:TypeScript 编译中缺少。...在 AngularCompilerPlugin.getCompiledFile
- flutter - 如何模拟点击按钮 Flutter WebView
- php - 使用php将文件从表单上传到s3存储桶
- java - RecyclerView 项目行中的 ProgressBar 未更新
- python - 如何在 python 中创建年同比图
- scala - 使用 MixedVec 在凿子中使用动态参数创建 IO 包
- php - 比较两个和三个数组中包含的相同值的数组中的任何位置
- mysql - mySQL:三列上的唯一约束以及特定值
- c# - 如何从产量返回中返回音频剪辑?