Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 设置关系表_Python_Database_Sqlite - Fatal编程技术网

Python 设置关系表

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

我想添加一个关系数据,而不处理id。让我解释一下。例如,
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?如果你有一对多关系,就像你所描述的,你不需要一个链接表。我将更新答案以描述如何查询。