在 SQLite3 DELETE 语句中引用 python 变量
Posted
技术标签:
【中文标题】在 SQLite3 DELETE 语句中引用 python 变量【英文标题】:Referring to a python variable in SQLite3 DELETE statement 【发布时间】:2013-04-05 01:09:59 【问题描述】:我正在编写一个函数来从表中删除一条记录。我试图在 delete 语句中引用的变量是 Tkinter 输入字段。
我使用 .get() 方法获取变量,但我无法将其传递给 SQLite 语句而不返回错误。
以下代码是框架的一部分,我只是在问题中添加了相关代码
from tkinter import *
import sqlite3
class EditOrdersForm(Frame):
def __init__(self):
Frame.__init__(self)
self.master.title("Edit Orders form:")
self.pack()
def displayDelOrderOptions(self):
self.deleteOrderOptionsLabel = Label(self, text="Enter the Order ID of the order you wish to delete: ").grid(row=numOrders+4, pady=2, sticky=W)
self.deleteOrderOptionsEntry = Entry(self, bd=3, width=10)
self.deleteOrderOptionsEntry.grid(row=numOrders+4, pady=5, column=1)
global orderToDelete
orderToDelete = self.deleteOrderOptionsEntry.get()
self.deleteButton = Button(self, text = "Delete this order", command = self.deleteOrder)
self.deleteButton.grid(row=numOrders+5, pady=5, column=1)
def deleteOrder(self):
conn = sqlite3.connect("testdb.db")
c = conn.cursor()
c.execute("DELETE FROM orders WHERE orders_id=:1)", (orderToDelete,))
conn.commit
c.close()
root = EditOrdersForm()
root.mainloop()
我遇到的问题是 WHERE 语句,我如何引用 orderToDelete。我尝试将其转换为字符串并使用 (?) 作为参数,但这也不起作用。
【问题讨论】:
【参考方案1】:parameterized 查询的正确语法是:
c.execute("DELETE FROM orders WHERE orders_id=?)", (orderToDelete,))
我相信你只需要调用 commit 而不是引用它
conn.commit()
【讨论】:
以上是关于在 SQLite3 DELETE 语句中引用 python 变量的主要内容,如果未能解决你的问题,请参考以下文章
当引用表中没有匹配的记录时,delete语句如何与REFERENCE约束冲突?
Python 3.6.0的sqlite3模块无法执行VACUUM语句
如何在 discord.py 中使用 sqlite3 配置欢迎事件?