I have tried to delete a record displayed in tkinter treeview in a database, although it is deleted in the treeview view but when I press the button “Display” the data appears again and it is not deleted from the sqlite3.db I get the following error:
- /Python/Employeed.py”, line 50, in delete_data
- data_employeed.deletedata(userid)
- /Python/data_employeed.py”, line 34, in deletedata
- cur.execute(“DELETE FROM employeeds WHERE userid = ?”,(userid,))
- sqlite3.OperationalError: no such column: userid
I created the code in two files:
1.- employeed.py (tkinter code)
2.- data_employeed.py (database code)
data_employeed.py
import sqlite3
def employeed():
con = sqlite3.connect('employeed.db')
cur = con.cursor()
cur.execute("""CREATE TABLE IF NOT EXISTS employeeds(
stDNI text,
Firstname text,
Surname text
)""")
con.commit()
con.close()
def addnew(stDNI, Firstname, Surname):
con = sqlite3.connect('employeed.db')
cur = con.cursor()
employeed()
cur.execute("""INSERT INTO employeeds VALUES(?,?,?)""",[stDNI, Firstname, Surname])
con.commit()
con.close()
return cur.lastrowid
def viewdata():
con = sqlite3.connect("employeed.db")
cur = con.cursor()
cur.execute("SELECT * FROM employeeds")
rows = cur.fetchall()
con.close()
return rows
def deletedata(userid):
con = sqlite3.connect('employeed.db')
cur = con.cursor()
cur.execute("DELETE FROM employeeds WHERE userid = ?",(userid,))
con.commit()
con.close()
type here
Employeed.py
import tkinter as tk
from tkinter import ttk
from tkinter import *
import tkinter.messagebox
import data_employeed
root = tk.Tk()
root.title('Demo Personnal')
root.geometry('600x400+40+40')
stDNI = StringVar()
Firstname = StringVar()
Surname = StringVar()
#=====================================================================FUNCTIONS==================================
def iexit():
iexit = tkinter.messagebox.askyesno("Database","Confirm if you want to exist")
if iexit > 0:
root.destroy()
return
def clear():
txtDNI.delete(0,END)
txtFirstname.delete(0,END)
txtSurname.delete(0,END)
def enter_data():
if(len(stDNI.get())!=0):
userid=data_employeed.addnew(stDNI.get(),Firstname.get(),Surname.get())
tree.insert('','end', iid=userid, values=(stDNI.get(),Firstname.get(),Surname.get()))
employeedlist.delete(0,END)
employeedlist.insert(END,(stDNI.get(),Firstname.get(),Surname.get()))
def display_data():
employeedlist.delete(0,END)
#for row in data_employeed.viewdata():
#employeedlist.insert(END, row, str(""))
#for userid in tree.get_children():
# tree.delete(userid)
for columna in data_employeed.viewdata():
tree.insert('',END, values=columna)
def delete_data():
userid = tree.selection()[0]
#print(userid)
tree.delete(userid)
data_employeed.deletedata(userid)
clear()
display_data()
#=====================================================================FRAMES==================================
frame = tk.Frame(root, bg='peachpuff', height='400', width='600')
frameleft = tk.Frame(frame, height='300', width='300',)
frameleft.grid(row=0, column=0)
datalabelleft = tk.LabelFrame(frameleft, text='Info Employee',height='20', width='20',)
datalabelleft.grid(row=0, column=0)
frameright = tk.Frame(frame, height='300', width='300', bg='sandybrown')
frameright.grid(row=0,column=1)
datalabelright = tk.LabelFrame(frameright, text='Visual', height='30',width='20', pady='1',bg='peachpuff')
datalabelright.grid(row=0, column=0)
datalabelbutton = tk.LabelFrame(frameleft, text='buttons', height='20',width='20')
datalabelbutton.grid(row=1, column=0)
#===================================================================LABELS & ENTRY=============================
lblDNI = tk.Label(datalabelleft,width='10',anchor='w',justify='left', text='DNI : ',pady=5)
lblDNI.grid(row=0, column=0)
txtDNI = tk.Entry(datalabelleft, textvariable= stDNI, width=35)
txtDNI.grid(row=0, column=1)
lblFirstname = tk.Label(datalabelleft,width='10',anchor='w',justify='left', text='First Name : ',pady=5)
lblFirstname.grid(row=1, column=0)
txtFirstname = tk.Entry(datalabelleft, textvariable= Firstname,width=35)
txtFirstname.grid(row=1, column=1)
lblSurname = tk.Label(datalabelleft,width='10',anchor='w',justify='right', text='Surname : ',pady=5)
lblSurname.grid(row=2, column=0)
txtSurname = tk.Entry(datalabelleft, textvariable= Surname,width=35)
txtSurname.grid(row=2, column=1)
#===================================================================LISBOX=======================================
scrollbar = tk.Scrollbar(datalabelright)
scrollbar.grid(row=0, column=1)
employeedlist = tk.Listbox(datalabelright, width=47, height=10, yscrollcommand= scrollbar.set)
employeedlist.bind('<<ListboxSelect>>',enter_data)
employeedlist.grid(row=0, column=0)
scrollbar.config(command=employeedlist.yview)
columna = ('id','Firstname','Lastname')
tree = ttk.Treeview(datalabelright, columns= columna, show='headings')
tree.heading('id',text='DNI')
tree.heading('Firstname',text='Firstname')
tree.heading('Lastname',text='Lastname')
tree.grid(row=0, column=1, padx=10)
#===================================================================BUTTONS=======================================
btnenter = tk.Button(datalabelbutton, text='Add new', height=1, width=8,command=enter_data)
btnenter.grid(row=0, column=0)
btnclear = tk.Button(datalabelbutton, text='Clear', height=1, width=8, command=clear)
btnclear.grid(row=0, column=1)
btndisplay = tk.Button(datalabelbutton, text='Display', height=1, width=8, command=display_data)
btndisplay.grid(row=0, column=2)
btnddelete = tk.Button(datalabelbutton, text='Delete', height=1, width=8, command=delete_data)
btnddelete.grid(row=0, column=3)
btnexit = tk.Button(datalabelbutton, text='Exit', height=1, width=8, command=iexit)
btnexit.grid(row=0, column=4)
frame.grid()
root.mainloop()
type here
New contributor
Tokyo_learning is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
1