【发布时间】:2021-01-23 00:57:36
【问题描述】:
注意:不能使用 ON CONFLICT,字段不唯一:serie_name 和 season 重复多次。
我需要更新一个系列中某一季的集数。我有一个3000行的表,需要一一检查,如果记录不存在,我会插入一个新行,如果已经存在,更新该行。 我有这个示例表:
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "series_test" (
"id_key" INTEGER NOT NULL,
"serie_name" VARCHAR(100) NOT NULL,
"season" INTEGER,
"episode_dub" INTEGER,
"episode_leg" INTEGER
);
INSERT INTO "series_test" VALUES ('id_key','serie_name','season','episode_dub','episode_leg');
INSERT INTO "series_test" VALUES (2,'1 Contra Todos',1,8,0);
INSERT INTO "series_test" VALUES (2,'1 Contra Todos',2,8,0);
INSERT INTO "series_test" VALUES (2,'1 Contra Todos',3,8,0);
INSERT INTO "series_test" VALUES (2,'1 Contra Todos',4,8,0);
INSERT INTO "series_test" VALUES (175,'Band Of Brothers',1,10,10);
INSERT INTO "series_test" VALUES (175,'Band Of Brothers',2,0,4);
INSERT INTO "series_test" VALUES (175,'Band Of Brothers',3,0,13);
COMMIT;
我需要插入一行,但如果字段数据已经存在于“serie_name”和字段“season”中,该命令只会更新记录。 如果条件不存在,则插入...否则更新数据
应该是这样的逻辑:
IF EXISTS (SELECT * FROM series_test WHERE serie_name='Band Of Brothers' AND season=3)
UPDATE series_test SET episode_dub=5 AND episode_leg=15 WHERE serie_name='Band Of Brothers' AND season=3
ELSE
INSERT INTO series_test (serie_name, season, episode_dub, episode_leg) VALUES ('Band Of Brothers', 3, 5, 15)
最优化的方法是什么?
补充:
如果只使用 sql,我不知道最好的方法是什么。或者使用 python + sql。
我通过 python 进行网络抓取,以获取该系列每季的最新剧集数据。我需要输入该数据或更新它。
更新旧数据,增加一季的集数
{'id_key': 175, 'serie_name': 'Band Of Brothers', 'season': 3, 'episode_dub': 5, 'episode_leg': 15}
插入一个系列的新一季及其剧集:
{'id_key': 175, 'serie_name': 'Band Of Brothers','season': 4,' episode_dub': 1, 'episode_leg': 3}
【问题讨论】:
-
样本数据中没有重复系列/季节的示例。我建议你更新 questin。
-
这个标记是否正确 这是 SQL 还是 python?
-
我为问题添加了一个补充
-
也许尝试两个基于集合的操作 - 更新加入和“插入不存在的子查询”。您在表 A 中有 3000 条记录与表 B 匹配,用表 A 更新表 B。听起来您正计划遍历表 A 并逐行更新。试试上面的两个集合操作。
标签: python sql sqlite insert case