如果符合条件,则插入行或更新行。用重复的术语,不是唯一的
Insert line or update line if it matches a condition. With repeated terms, not unique
注意:不能使用 ON CONFLICT,字段不唯一:serie_name 和季节重复多次。
我需要更新连续剧中一季的剧集数。我有一个 table 有 3000 行,我需要一条一条地检查,如果记录不存在,我将插入一个新行,如果它已经存在,则更新该行。
我有这个例子 table:
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}
您可以为 serie_name
和 season
列定义复合 UNIQUE
约束:
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,
UNIQUE(serie_name, season)
);
现在您可以使用 ON CONFLICT
:
INSERT INTO series_test (id_key, serie_name, season, episode_dub, episode_leg) VALUES
(175, 'Band Of Brothers', 3, 5, 15)
ON CONFLICT(serie_name, season) DO UPDATE
SET episode_dub = EXCLUDED.episode_dub,
episode_leg = EXCLUDED.episode_leg
请注意,您还必须为 id_key
列提供一个值,因为它被定义为 NOT NULL
.
参见demo。
注意:不能使用 ON CONFLICT,字段不唯一:serie_name 和季节重复多次。
我需要更新连续剧中一季的剧集数。我有一个 table 有 3000 行,我需要一条一条地检查,如果记录不存在,我将插入一个新行,如果它已经存在,则更新该行。 我有这个例子 table:
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}
您可以为 serie_name
和 season
列定义复合 UNIQUE
约束:
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,
UNIQUE(serie_name, season)
);
现在您可以使用 ON CONFLICT
:
INSERT INTO series_test (id_key, serie_name, season, episode_dub, episode_leg) VALUES
(175, 'Band Of Brothers', 3, 5, 15)
ON CONFLICT(serie_name, season) DO UPDATE
SET episode_dub = EXCLUDED.episode_dub,
episode_leg = EXCLUDED.episode_leg
请注意,您还必须为 id_key
列提供一个值,因为它被定义为 NOT NULL
.
参见demo。