Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 SQLite3如何为多对多关系创建insert语句?_Python_Sqlite_Many To Many_Sql Insert - Fatal编程技术网

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创建一个脚本,该脚本将提示用户创建新任务并将它们与现有类别关联。