【发布时间】:2021-11-20 06:06:37
【问题描述】:
在我列出我的问题之前,让我先给你一些背景信息。
我正在为我的项目使用 python、tkinter 和 MySQL。我的数据库中有 2 个表 timetablebtn,它们的字段是:
----------------------------------------------------------
Field | Type | Null | Key | Default | Extra |
----------+---------------+------+-----+---------+--------
sno | int(5) | NO | PRI | 0 | |
btnobject | varchar(50) | NO | | NULL | |
tabledate | varchar(20) | NO | | NULL | |
----------------------------------------------------------
上面的示例记录是:1,"btnobject1","01/01/21"、2,"btnobject2","02/01/21
我将使用以下 sql 命令实现INSERT INTO timetablebtn VALUES (1,"btnobject1","01/01/21");
此表中有 24 条此类记录。
和timtableevents:
------------------------------------------------------
Field | Type | Null | Key | Default | Extra |
-------+--------------+------+-----+---------+-------+
sno | int(5) | NO | PRI | 0 | |
time | varchar(20) | NO | | NULL | |
events | varchar(100) | NO | | NULL | |
------------------------------------------------------
此记录的一个示例是:1,"07:30-08:30","Exercise"
我想要的是timetablebtn 表中的每个btnobject 都引用timetablevents 的不同实例,即我希望每个 btnobject 都有自己的时间表事件,而无需我手动创建每个表,因为创建 24 个表需要大量工作。
或
我希望 btnobject 成为新表结构的外键:
---------------------------------------------
btnobject | sno | time | events |
-----------+-----+-------------+------------+
btnobject1 | 1 | 07:30-08:30 | Exercise |
| 2 | 08:30-09:00 | Breakfast |
| 3 | 09:00-11:00 | HackerRank |
btnobject2 | 1 | 07:30-08:30 | Exercise |
| 2 | 08:30-09:00 | Breakfast |
| 3 | 09:00-11:00 | Read books |
---------------------------------------------
或
创建一个以 btnobject 作为外键的表,其中表结构为:
--------------------
btnobject | details
-----------+--------
btnobject1 | {'sno':[1,2,3],'time':['07:30-08:30','08:30-09:00','09:00-11:00'],'events':['Exercise','Breakfast','HackerRank'] }
btnobject2 | {'sno':[1,2,3],'time':['07:30-08:30','08:30-09:00','09:00-11:00'],'events':['Exercise','Breakfast','Read books'] }
details 列下的元素是 python 字典。
有什么办法可以做到这一点?
或者
如果有比我上面列出的更好的方法,请与我分享。提前致谢。
【问题讨论】:
-
由于
sno是主键,不同的btnobject不能有相同的值。 -
@acw1668 好的,如果我将 btnobject 作为主键,那么是否可以以我上面显示的格式存储它?
-
谁的字段请提供 CREATE TABLE,而不是 DESCRIBE。 上面的示例记录将是将其作为 INSERT INTO 提供。后面的输出示例必须与以前的源数据匹配 - 所以提供所需的行数。
-
我建议
timetablebtn表中的所有字段都是PRIMARY键,sno和time是timetableevents表的PRIMARY键。 -
@acw1668,一张表只能有1个主键。但我猜你的意思是“外键”?
标签: python mysql tkinter foreign-keys