SQLite数据库不会使用Python变量更新

SQLite数据库不会使用Python变量更新,python,sqlite,tkinter,Python,Sqlite,Tkinter,我试图用一个变量更新(添加)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。操作错误:没有这样的列:x。 但是,

我试图用一个变量更新(添加)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。操作错误:没有这样的列:x
。 但是,当我尝试用常量say
30
替换变量
x
时,即:

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

为字符串中的变量添加占位符“?”

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

您在双引号中写入了变量x,当cursor语句执行时,它会尝试在表中查找列x,这就是发生错误的原因

您必须使用占位符将变量的值传递给查询。

您已将变量x写入双引号中,当游标语句执行时,它会尝试在表中查找列x,这就是发生错误的原因


必须使用占位符将变量的值传递给查询。

请将代码与文本分开。这使其可读性更好。请将代码与文本分开。这使它更具可读性。这就是方法。我建议使用字符串格式的答案,因为我不确定占位符在这里是否有效,但我检查了它,一切正常。这就是解决方法。我建议使用字符串格式的答案,因为我不确定占位符在这里是否有效,但我检查了它,一切正常。