Python SQLite3如何为多对多关系创建insert语句?
假设您有三个基本表,它们实现了任务和类别之间的多对多关系:Python SQLite3如何为多对多关系创建insert语句?,python,sqlite,many-to-many,sql-insert,Python,Sqlite,Many To Many,Sql Insert,假设您有三个基本表,它们实现了任务和类别之间的多对多关系: CREATE TABLE task( id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL, name INTEGER NOT NULL, description INTEGER NOT NULL ); CREATE TABLE category( id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL, name TEXT
CREATE TABLE task(
id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL,
name INTEGER NOT NULL,
description INTEGER NOT NULL
);
CREATE TABLE category(
id INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL,
name TEXT NOT NULL
);
CREATE TABLE task_category(
task_id INTEGER,
category_id INTEGER,
);
如果我想在我的数据库中插入一个名为“编写脚本”的任务,其中有一些描述“我编写了一个python脚本”。该任务与“python”和“脚本”类别关联,我该如何做?假设数据库中已经存在python和脚本类别
我看了一下这个问题:
看起来外键的一些实现可能很有用,但我仍然不知道INSERT语句是什么样子
我最好的尝试是将任务插入到任务表中,然后进行选择以获取我刚刚插入的任务及其id,然后手动将该id链接到任务类别表中的类别。这似乎不是一个非常有效的方法
将记录插入sqlite数据库并将其链接到多对多关系的标准方法是什么?外键约束只是约束,即它们阻止您将无效数据插入数据库。它们不会为您节省实际插入数据的工作,因此它们与此问题无关。(它们仍然有用。) 在Python中,该属性返回刚刚插入的ID:
cursor.execute("INSERT INTO task(name, description) VALUES(?, ?)",
["wrote script", "I wrote a python script."])
task_id = cursor.lastrowid
cursor.execute("""INSERT INTO task_category(task_id, category_id)
SELECT ?, id
FROM category
WHERE name IN (?, ?)""",
[task_id, "python", "scripting"])
您使用哪种语言访问数据库?我使用Python创建一个脚本,该脚本将提示用户创建新任务并将它们与现有类别关联。