【发布时间】:2020-07-08 17:27:42
【问题描述】:
我已经创建了一个包含 3 列(id、名称、价格)的数据库,由于我无法显示列表框中的所有列,我只显示列“名称”,所以我希望能够删除数据库中的项目基于我单击列表框的产品名称。 这是代码,希望对您有所帮助:
import tkinter
from tkinter import *
import mysql.connector
root = Tk()
root.geometry('700x500')
con = mysql.connector.connect(user = '', password = '', host = '127.0.0.1', database = 'anime')
concursor = con.cursor()
concursor.execute('select * from prod')
query = concursor.fetchall()
l = Listbox(root)
for x,y,z in query:
l.insert(x+1, y)
l.pack(anchor='w')
#function to delete prod
def delp():
sel_items = l.curselection()
for item in sel_items:
concursor.execute("delete from prod where name = ('{}')".format(item))
con.commit()
button1 = Button(root, text = 'prod del', command = delp)
button1.pack(anchor='w')
root.mainloop()
只有当我在“delp”函数的查询中将“name”替换为“id”时,python 代码才有效,但是当我选择列表框中的第一项时,它会删除数据库中的第二项,并且我希望能够根据名称删除。
【问题讨论】:
-
您应该将
name(yin for loop) 列而不是id(x) 列从 db 插入到列表框中。l.curselection()返回选定的索引,而不是内容。 -
@acw1668 当我只插入“名称”(for 循环中的 y)而不是 x+1、y 或 x,我得到错误“错误的列表框索引(项目名称)必须是活动、锚点、结束、@x、y 或数字”,有没有办法从列表框中获取内容,以便我可以根据名称从数据库中删除?如果您知道列表框以外的其他东西可以完成这项工作,那将会有所帮助。
标签: python mysql python-3.x tkinter