Вот мои таблицы:Как вставить в две таблицы, которые связаны вместе с foreign_keys?
CREATE TABLE thread
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
post_id INTEGER,
FOREIGN KEY(post_id) REFERENCES post(id)
);
CREATE TABLE post
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
message TEXT,
thread_id INTEGER,
user_id INTEGER,
FOREIGN KEY(thread_id) REFERENCES thread(id),
FOREIGN KEY(user_id) REFERENCES user(id)
);
У меня есть таблица потоков, которые содержат идентификатор первого поста (автор поста).
Если я хочу вставить новое сообщение в существующую тему, это легко, потому что я знаю thread_id
.
Но если я хочу создать новый поток, мне нужно знать post_id
сообщения, которое еще не существует.
В настоящее время я делаю это с запросами SQL кратной и кратными совершает:
cur = db.execute("""
INSERT INTO post (content, user_id)
VALUES(?, ?, ?)""", [content, user_id])
db.commit()
post_id = cur.lastrowid
cur = db.execute("""
INSERT INTO thread (title, post_id)
VALUES(?, ?, ?)""", [title, post_id])
db.commit()
thread_id = cur.lastrowid
db.execute("""
UPDATE post
SET thread_id = ?
WHERE id=?""", [thread_id, post_id])
db.commit()
Но это очень некрасиво и я думаю, что есть лучшее решение. Если бы я мог сделать что-то подобное, было бы идеально, но это не допускается:
INSERT INTO thread(title)
VALUES("thread 1");
INSERT INTO post(post, thread_id)
VALUES("first post of thread 1", LAST_INSERT_ROWID() AS tmp);
UPDATE thread
SET post_id = LAST_INSERT_ROWID()
WHERE id = tmp;
Любые идеи?
Спасибо!