我想在不处理ID 的情况下添加关系数据。让我解释。例如,Nokta1
和Nokta2
与Cihaz1
相关。 Nokta3
与Cihaz2
相关。所以这是一个一对多的关系。
将Cihaz1
和Cihaz2
行添加到cihaz
表后,如何将Nokta1
,Nokta2
和Nokta3
行插入{ {1}}表与这些关系?
我的代码中是否有错误?
nokta
答案 0 :(得分:0)
链接表应定义为:
create table link (
nokta_id integer,
cihaz_id integer,
FOREIGN KEY(nokta_id) REFERENCES nokta(id),
FOREIGN KEY(cihaz_id) REFERENCES cihaz(id)
)
但你真的根本不需要这张桌子。它只是Nokta表对属性id和cihaz_id的投影(即相当于选择id,来自Nokta的chaz_id)。
将“Cihaz1”和“Cihaz2”行添加到“cihaz”表后,我怎么能用这些关系将“Nokta1”,“Nokta2”和“Nokta3”行插入“nokta”表?
添加Nokta1,Nokta2和Nokta3应该没有问题,只要它们只引用cihaz表中的现有值。
e.g。
INSERT INTO CIHAZ(name) VALUES('Cihaz1');
...
INSERT INTO CIHAZ(name) VALUES('Cihaz7');
INSERT INTO NOKTA(name, module, type, desc, cihaz_id) VALUES ('Nokta1', 'AO', 'CVXY', '1', 1),
对于最后一个字段(外键字段),值1,2,3,4,5,6或7都可以,因为我们已经将带有这些键的行插入到CIHAZ中(自动创建)。
答案 1 :(得分:0)
如果您想通过名称而不是ID来关联它们,那么只需使用外键来命名。
c.execute('''create table nokta
id integer primary key autoincrement,
name text,
parent text
FOREIGNKEY(parent) REFERENCES cihaz(name)''')
现在,当您插入nokta时,只需使用适当的父级。
c.execute('insert into nokta (text, parent) values ?, ?', ('Nokta1', 'Cihaz1'))
现在要查询与特定cihaz相关的所有nokta,只需使用名称。
c.execute('select * from nokta where parent = ?', ('Cihaz1',))