SQLite数据库不会使用Python变量更新
我试图用一个变量更新(添加)SQLite数据库表中名为“product_qty”的单元格的整数值,代码行如下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。 但是,
x = int(TOPUPQTY.get())
cursor.execute("UPDATE 'product' SET product_qty = product_qty + x WHERE `product_name` LIKE ?", ('%'+str(TOPUPPRODUCT_NAME.get())+'%',))
我得到了一个sqlite3。操作错误:没有这样的列:x
。
但是,当我尝试用常量say30
替换变量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,这就是发生错误的原因
必须使用占位符将变量的值传递给查询。请将代码与文本分开。这使其可读性更好。请将代码与文本分开。这使它更具可读性。这就是方法。我建议使用字符串格式的答案,因为我不确定占位符在这里是否有效,但我检查了它,一切正常。这就是解决方法。我建议使用字符串格式的答案,因为我不确定占位符在这里是否有效,但我检查了它,一切正常。