首页 > 解决方案 > 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())+'%',))

这很好用,但我需要使用变量而不是常量。

标签: pythonsqlitetkinter

解决方案


添加占位符“?” 对于字符串中的变量。

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 包本身的格式。


推荐阅读