Python 设置关系表
我想添加一个关系数据,而不处理id。让我解释一下。例如,Python 设置关系表,python,database,sqlite,Python,Database,Sqlite,我想添加一个关系数据,而不处理id。让我解释一下。例如,Nokta1和Nokta2与Cihaz1相关Nokta3与Cihaz2相关。所以这是一对多的关系 在将Cihaz1和Cihaz2行添加到cihaz表后,如何使用这些关系将Nokta1、Nokta2和Nokta3行插入到nokta表中 我的代码有错误吗 import sqlite3 # data NOKTALAR = ( ('Nokta1', 'AO', 'CVXY', '1'), ('Nokta2', 'AO', 'CVX
Nokta1
和Nokta2
与Cihaz1
相关<代码>Nokta3与Cihaz2
相关。所以这是一对多的关系
在将Cihaz1
和Cihaz2
行添加到cihaz
表后,如何使用这些关系将Nokta1
、Nokta2
和Nokta3
行插入到nokta
表中
我的代码有错误吗
import sqlite3
# data
NOKTALAR = (
('Nokta1', 'AO', 'CVXY', '1'),
('Nokta2', 'AO', 'CVXY', '1'),
('Nokta3', 'BO', 'MESR', '1'),
('Nokta4', 'BO', 'MESR', '1'),
('Nokta5', 'BI', 'APTU', '2'),
('Nokta6', 'AI', 'FTRE', '1'),
('Nokta7', 'AI', 'FTRE', '1'),
)
CIHAZLAR = (
('Cihaz1'),
('Cihaz2'),
('Cihaz3'),
('Cihaz4'),
('Cihaz5'),
('Cihaz6'),
)
# get connection and cursor objects
conn = sqlite3.connect('iodatabase')
c = conn.cursor()
# create tables
c.execute('''create table cihaz (
id integer primary key autoincrement,
name text
)''')
c.execute('''create table nokta (
id integer primary key autoincrement,
name text,
module text,
type text,
desc text,
cihaz_id integer
FOREIGN KEY(cihaz_id) REFERENCES cihaz(id)
)''')
c.execute('''create table link (
nokta_id integer,
cihaz_id integer,
)''')
链接表应定义为:
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上的投影(即等同于Nokta的select id、chaz_id)
在将“cihaz 1”和“cihaz 2”行添加到“cihaz”表后,我如何>在“nokta”表中插入具有这些关系的“Nokta1”、“Nokta2”和“Nokta3”行
添加Nokta1、Nokta2和Nokta3应该没有问题,只要它们只引用cihaz表中的现有值
e、 g
对于最后一个字段(外键字段),值1、2、3、4、5、6或7就可以了,因为我们已经在CIHAZ(自动创建)中插入了带有这些键的行。如果您想按名称而不是ID关联它们,那么只需使用外键即可
c.execute('''create table nokta
id integer primary key autoincrement,
name text,
parent text
FOREIGNKEY(parent) REFERENCES cihaz(name)''')
c.execute('select * from nokta where parent = ?', ('Cihaz1',))
现在,当您插入nokta时,只需使用适当的父级
c.execute('insert into nokta (text, parent) values ?, ?', ('Nokta1', 'Cihaz1'))
现在要查询与特定cihaz相关的所有nokta,只需使用名称
c.execute('''create table nokta
id integer primary key autoincrement,
name text,
parent text
FOREIGNKEY(parent) REFERENCES cihaz(name)''')
c.execute('select * from nokta where parent = ?', ('Cihaz1',))
对不起,你毕竟需要那个。我还需要“链接”表吗?稍后我将查询数据库。考虑到这一点,我如何实现与NIKTA有关的数据,例如,CIHAZ1?如果你有一对多关系,就像你所描述的,你不需要一个链接表。我将更新答案以描述如何查询。