怎么为多对多关系创建INSERT语句?

原学程将引见若何为多对于多闭系创立INSERT语句?的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

怎么为多对多关系创建INSERT语句? 教程 第1张

成绩描写

假定您有3个根本表,它们完成义务以及类型之间的多对于多闭系:

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,
);

假如我想要在数据库中拔出1个名为"WRITED SCRIPT"的义务,而且描写为"I WRITE A PYTHON SCRIPT"。这是与类型"python"以及"剧本"相干联的,我该怎样做呢?假定数据库中曾经存留python以及剧本类型。

我瞅了这个成绩:SQLite many-to-many relationship?

仿佛外键的某些完成能够颇有用,但是我依然没有晓得INSERT语句会是甚么模样。

我最佳的测验考试是将义务拔出到TASK表中,而后履行SELECT以夺取我方才拔出的戴有其ID的义务,而后脚动将该ID链交到TASK_CATEGORY表中的类型。这仿佛没有是1种异常有用的办法。

将记载拔出到SQLite数据库并将其链交到多对于多闭系的尺度办法是甚么?

推举谜底

外键束缚便是,即它们阻拦叨教有效数据拔出数据库。它们没有会为您节俭现实拔出数据的任务,是以它们与这个成绩有关。(它们依然有效。)

在Python中,lastrowid属性前往刚刚拔出的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"])

佳了闭于怎样为多对于多闭系创立INSERT语句?的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。