首页 > 解决方案 > 如何使用“名称”而不是 id 从 SQLite 中删除记录?

问题描述

我在下面有一个代码,当我使用 Id 时,它使用“email_address”从数据库中删除记录,它删除得很好,但是当我将它切换到“email_address”时,它给了我一个 sqlite3.OperationalError。我有一个输入字段,用于存储将要删除的数据,并在下面作为“email_delete”传递。有谁知道如何修理它?这是包含错误消息的图像的链接

def removeEmail():
conn = sqlite3.connect("email.db")
c = conn.cursor()
if c.execute("DELETE from email WHERE email_address =(?)" + email_delete.get()):
    deleted_email = Label(
        root, text="You have been Unsubscribed from the mailing list"
    )
    deleted_email.grid(row=5, column=0)
else:
    error_label = Label(root, text="There is no such record")
    error_label.grid(row=5, column=0)

email_delete.delete(0, END)
conn.commit()
conn.close()

标签: pythonsqldatabasesqlitetkinter

解决方案


您需要将替换查询中占位符的值作为第二个参数传递给,c.execute(...)而不是将它们与查询字符串连接在一起:

代替

c.execute("DELETE from email WHERE email_address =(?)" + email_delete.get())

c.execute("DELETE from email WHERE email_address=?", (email_delete.get(),))

推荐阅读