Python + MySQL。如何将字段的 ID 从 ComboBox 传递到数据库?

Posted

技术标签:

【中文标题】Python + MySQL。如何将字段的 ID 从 ComboBox 传递到数据库?【英文标题】:Python + MySQL. How can I pass the ID of a field from a ComboBox to the database? 【发布时间】:2021-12-20 01:08:51 【问题描述】:

我有一个包含来自 mysql DB 的选定字段值的组合框。如何使字段ID而不是ComboBox中的值传递给数据库?

这是对数据库添加记录的请求:

    def new_module(self):
    def new_module_add(Event):
    dt = str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    with self.con.cursor() as cur:
        cur.execute("INSERT INTO modules (version, date, description, common_id) VALUES ('"+str(self.module_entry0.get())+"', '"+dt+"', '"+str(self.module_description.get("1.0", END))+"', '"+module_common.get()+"')")
    self.con.commit()

    print(self.module_common.get())

这是 ComboBox 本身:

  with self.con.cursor() as cur:
    cur.execute("SELECT * FROM common_data")
    c = cur.fetchall()



  self.module_common = ttk.Combobox(master=self.new_module,
              text="Engine",
              values = [(c[i][1]) for i in range(len(c))], state='readonly')

  self.module_common.grid(row=7, column=0)

我需要值c[i][0],即ID。是否可以以某种方式添加此变量以将其传输到数据库?

【问题讨论】:

请edit您的问题并修正代码的缩进。 combobox 应该为您提供所选元素的索引,您应该使用它从 c 获取 ID,例如 ID = c[selected][0] 首选(出于安全原因):execute("INSERT ... VALUES (?, ?, ?)", (value1, value2, value3)) 你应该学会在没有range(len())的情况下使用for-loop——它提供了更易读的代码,比如values = [row[1] for row in c]而不是values = [(c[i][1]) for i in range(len(c))] 【参考方案1】:

comobobox.current() 可以为您提供所选元素的index,您可以使用它从列表ID = c[index][0] 中获取ID

index = self.module_common.current()

ID = c[index][0]

但它需要将c 保留为self.c 才能访问其他功能。


最小的工作示例:

import tkinter as tk
from tkinter import ttk

# --- functions ---

def run_sql(event):
    #print(event)

    index = cb.current()
    print('index:', index)

    row = c[index]
    print('ID:', row[0])
    
# --- main ---

c = [
  (123, 'A'),
  (124, 'B'),
  (125, 'C'),
]

root = tk.Tk()

cb = ttk.Combobox(root, values=[row[1] for row in c], state='readonly')
cb.pack()
cb.bind("<<ComboboxSelected>>", run_sql)

root.mainloop()

编辑:

我找到了我的旧答案,它展示了如何构建自己的 ComboBox,它提供了不同的价值。

Is is possible to create key-value ComboBox in Tkinter?

【讨论】:

以上是关于Python + MySQL。如何将字段的 ID 从 ComboBox 传递到数据库?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 如何将Id相同的字段合并,并且以逗号隔开

在 python 中使用 MySQLdb 插入 mysql 后,如何安全有效地获取行 ID?

在 python 中使用 MySQLdb 插入 mysql 后,如何安全有效地获取行 ID?

python 导出mysql数据库中当天的数据

python django查询mysql表字段的最大值

如何在 MySQL 的子查询中指定父查询字段?