我正在抓取一些网站并将结果存储在sqlite中,因为我的抓取可能每个月都会重复,但我不想将重复的结果存储在我的数据库中,我该怎么办?
例如,我第一次
insert into tableName(A, B, C, D, E) values(a,b,c,d,e)
然后我的数据库将有这条记录,下次我抓取这个网站时,我也会这样做,但我不想存储重复的结果,我能做的最好的方法是什么?
此外,如果我使用MySQL怎么办?
答案 0 :(得分:1)
您可以使用insert ignore
SQLite的
insert or ignore into tableName(A, B, C, D, E) values(a,b,c,d,e)
的MySQL
insert ignore into tableName(A, B, C, D, E) values(a,b,c,d,e)
请注意两个代码之间的区别是或,它们不一样。
这只有在有某种主键的情况下才有效。
答案 1 :(得分:1)
使用sqlite,create your table with a UNIQUE constraint:
CREATE TABLE tableName (A INTEGER, B INTEGER, C INTEGER, D INTEGER, E INTEGER,
UNIQUE (A, B, C, D, E));
然后
INSERT OR IGNORE INTO tableName (A, B, C, D, E) values (a,b,c,d,e);
will only insert a new record if (a,b,c,d,e)
is unique - 即表tableName
中尚未出现。
致add a UNIQUE index to an already existent table:
CREATE UNIQUE INDEX unique_idx on tableName(A, B, C, D, E);
或使用MySQL,create a table with a unique index:
CREATE TABLE tableName (A INT, B INT, C INT, D INT, E INT,
UNIQUE KEY unique_idx (A, B, C, D, E))
INSERT IGNORE INTO tableName (A, B, C, D, E) values (a,b,c,d,e)
致add a UNIQUE KEY index to an already existent table:
ALTER TABLE tableName ADD UNIQUE KEY unique_idx (A, B, C, D, E);
答案 2 :(得分:0)
您可以创建一个临时/辅助表,说temp_tableName
具有与tableName
相同的架构。然后爬行时执行
insert into temp_tableName select * from tableName;
delete from tableName;
insert into tableName(A, B, C, D, E) values(a,b,c,d,e)
如果爬行插入失败,则需要辅助表,然后您需要备份存储。另外,请考虑在DELETE/INSERT
块中执行此步骤Transaction
以获取原子性。