[英]Inserting with Foreign Key in sqlite3 for python
我有一个名为soccer.db
的数据库,其中包含两个表team
和game
我使用 DB Browser 创建数据库。 我的sqlite3
版本是 3.30.0。 我还确认启用/检查了外键编译指示。
CREATE TABLE "team" (
"id" INTEGER UNIQUE,
"opponent_name" TEXT,
"rank_when played" INTEGER,
"date_added" TEXT,
PRIMARY KEY("id" AUTOINCREMENT)
);
CREATE TABLE "game" (
"id" INTEGER,
"opponent_id" INTEGER,
"goals_for" INTEGER,
"goals_against" INTEGER,
"date_added" TEXT,
PRIMARY KEY("id" AUTOINCREMENT),
FOREIGN KEY("opponent_id") REFERENCES "team"("id")
);
现在,我正在尝试使用以下代码在 jupyter notebook 中使用 sqlite3 将每周游戏信息插入game
数据库。
conn = sqlite3.connect('soccer.db')
c = conn.cursor()
c.execute('INSERT INTO team (opponent_name, rank_when_played, date_added) VALUES (?,?,?)', ('Manchester_City', 4, '04/22/2018')
c.execute('INSERT INTO game (opponent_id, goals_for, goals_against, date_added) VALUES (?,?,?,?)', ((SELECT id FROM team WHERE opponent_name = 'Machester City'), 3, 2, '04/22/2018')
conn.commit()
c.close()
当我尝试运行代码时,出现以下错误。 我确认第一个插入语句有效,所以我假设错误是指第二个插入语句。
SyntaxError: invalid syntax
我究竟做错了什么?
您应该使用lastrowid
的 lastrowid,如下所示:
c = conn.cursor()
c.execute('INSERT INTO team (opponent_name, rank_when_played, date_added) VALUES (?,?,?)',
('Manchester_City', 4, '04/22/2018'))
c.execute('INSERT INTO game (opponent_id, goals_for, goals_against, date_added) VALUES (?,?,?,?)',
(c.lastrowid, 3, 2, '04/22/2018'))
# ==========
conn.commit()
另一方面,如果您想使用现有团队,您可以执行以下操作:
c = conn.cursor()
c.execute("Select id from team where opponent_name = ?", ('Manchester_City', ))
res = c.fetchone()
team_id = res[0]
c.execute('INSERT INTO game (opponent_id, goals_for, goals_against, date_added) VALUES (?,?,?,?)',
(team_id, 3, 2, '07/23/2018'))
conn.commit()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.