import tkinter as tk
import sqlite3 as sql
class main_window:
def __init__(self, window):
self.wind = window
self.wind.geometry('500x500')
self.wind.resizable(0, 0)
self.draw()
self.refresh()
def draw(self):
tk.Label(text= 'Usuario').pack()
self.user = tk.Entry()
self.user.pack()
tk.Label(text= 'Password').pack()
self.password = tk.Entry()
self.password.pack()
self.frame = tk.Frame(self.wind)
self.frame.pack()
tk.Button(self.frame, text= 'Save', width= 5, height= 1, command= self.save).pack(side= 'left')
tk.Button(self.frame, text= 'Delete', width= 5, height= 1, command= self.delete).pack(side= 'top')
self.user_list = tk.Listbox(width= 40, height= 100)
self.user_list.pack(padx= 4, pady= 8, side= 'left')
self.password_list = tk.Listbox(width= 40, height= 100)
self.password_list.pack(padx= 4, pady= 8, side= 'left')
def refresh(self):
self.user.delete(0, tk.END)
self.password.delete(0, tk.END)
self.user_list.delete(0, tk.END)
self.password_list.delete(0, tk.END)
db = sql.connect('accounts.db')
curs = db.cursor()
db_accounts_users = curs.execute("SELECT user FROM tb_accounts")
for user in db_accounts_users:
for uss in user:
self.user_list.insert(tk.END, uss)
db_accounts_pass = curs.execute("SELECT pass FROM tb_accounts")
for password in db_accounts_pass:
for fpass in password:
self.password_list.insert(tk.END, fpass)
db.commit()
db.close()
def save(self):
db = sql.connect('accounts.db')
curs = db.cursor()
curs.execute("INSERT INTO tb_accounts(user, pass) VALUES (?, ?)", (self.user.get(), self.password.get()))
db.commit()
db.close()
self.refresh()
def delete(self):
for user in self.user_list.curselection():
select_user = self.user_list.get(user)
db = sql.connect('accounts.db')
curs = db.cursor()
curs.execute("DELETE FROM tb_accounts WHERE user= ?", (select_user))
db.commit()
db.close()
self.refresh()
obj_main_window = main_window(tk.Tk())
obj_main_window.wind.mainloop()
这个想法是用一个按钮删除一个数据。但是当我按下按钮时,我得到了下一个错误。sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用1,提供了4。
在错误中提供的数量取决于用户有多少个字符。谢谢你的帮助。这只是一个个人实践。
2条答案
按热度按时间wgx48brx1#
我使用list而不是tuple作为查询参数:
curs.execute(“DELETE FROM tb_accounts WHERE user=?“,[select_user])
pxiryf3j2#
请注意,
(select_user)
不是元组,但(select_user,)
是。