【问题标题】:How to delete from Mysql Database an item selected in a Listbox Python Tkinter如何从 Mysql 数据库中删除列表框 Python Tkinter 中选择的项目
【发布时间】: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 (y in for loop) 列而不是 id (x) 列从 db 插入到列表框中。 l.curselection() 返回选定的索引,而不是内容。
  • @acw1668 当我只插入“名称”(for 循环中的 y)而不是 x+1、y 或 x,我得到错误“错误的列表框索引(项目名称)必须是活动、锚点、结束、@x、y 或数字”,有没有办法从列表框中获取内容,以便我可以根据名称从数据库中删除?如果您知道列表框以外的其他东西可以完成这项工作,那将会有所帮助。

标签: python mysql python-3.x tkinter


【解决方案1】:

所以我想通了,所以这里是那些正在/将要寻找这个的人的答案。

首先我们不需要 curselection() 我们需要获取活动项或 Anchor 并“将其串起来”,然后在查询中使用它的格式。 这是有意义的代码

    def delp():
        sel_items = l.get(ACTIVE)
        string_item = str(sel_items)
        for item in sel_items:
            concursor.execute("delete from prod where name = ('{}')".format(string_item))
        con.commit()

此代码将根据列表框中选择的名称删除数据库中的项目。

【讨论】:

    猜你喜欢
    • 2019-04-06
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多