I have a code below which Deletes records from the database using the “email_address” when i use the Id, it deletes fine, but when i switch it to “email_address” it gives me a sqlite3.OperationalError. I have an input field which stores the data that is going to be deleted and is passed down below as “email_delete”. Does anyone know how to fix it?This is the link to the image which contains the error message
x
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()
Advertisement
Answer
You need to pass the values that will replace the placeholders in your query as a second argument to c.execute(...)
instead of concatenating them together with the query string:
Instead of
c.execute("DELETE from email WHERE email_address =(?)" + email_delete.get())
do
c.execute("DELETE from email WHERE email_address=?", (email_delete.get(),))