sqlite3用python家外键_SQLite外键示例

多对多

为了支持一个具有零个或多个狗的子级和一个属于零个或多个子级的狗,您的数据库表结构需要支持一个多对多关系。这需要三张桌子:CREATE TABLE child (

id INTEGER PRIMARY KEY AUTOINCREMENT,

name TEXT

);

CREATE TABLE dog (

id INTEGER PRIMARY KEY AUTOINCREMENT,

dog TEXT

);

CREATE TABLE child_dog {

child_id INTEGER,

dog_id INTEGER,

FOREIGN KEY(child_id) REFERENCES child(id),

FOREIGN KEY(dog_id) REFERENCES dog(id)

};

如何插入

三个表中的每一个表都必须是单独的SQL语句,但可以在同一事务的上下文中进行插入。插入子狗表(称为映射表)必须在插入子狗表和狗表之后进行。这有两个相关原因:你需要知道孩子和狗的身份,以便

插入此表。

由于外键约束,如果数据库或事务中不存在引用的子和/或狗,则插入子狗表将失败。

下面是一些用于插入的SQL语句示例:INSERT INTO child VALUES(NULL, 'bobby');

SELECT last_insert_rowid(); -- gives the id of bobby, assume 2 for this example

INSERT INTO dog VALUES(NULL, 'spot');

SELECT last_insert_rowid(); -- gives the id of spot, assume 4 for this example

INSERT INTO child_dog VALUES(2, 4);

在Python中插入

虽然您的问题没有提到python,但是在这个问题上有一个python标记,所以我假设您想知道如何在python中实现这一点。python中的sqlite3模块提供了一个很好的小快捷方式,省去了必须显式运行“last_insert_rowid()”函数的麻烦。# Import the sqlite3 module

import sqlite3

# Create a connection and cursor to your database

conn = sqlite3.connect('example.db')

c = conn.cursor()

# Insert bobby

c.execute("""INSERT INTO child VALUES(NULL, 'bobby')""")

# The python module puts the last row id inserted into a variable on the cursor

bobby_id = c.lastrowid

# Insert spot

c.execute("""INSERT INTO dog VALUES(NULL, 'spot')""")

spot_id = c.lastrowid

# Insert the mapping

c.execute("""INSERT INTO child_dog VALUES(?, ?)""", (bobby_id, spot_id));

# Commit

conn.commit()

conn.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值