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 传递到数据库?的主要内容,如果未能解决你的问题,请参考以下文章
在 python 中使用 MySQLdb 插入 mysql 后,如何安全有效地获取行 ID?