我正在使用Python3.4开发简单的html刮板,使用peewee作为ORM (很好的ORM!)。我的脚本需要一堆站点,提取必要的数据并将它们保存到数据库中,但是每个站点都是在分离的过程中被刮掉的,以提高性能,保存的数据应该是唯一的。有重复的数据不仅可以在网站之间,而且在特定的网站上,所以我只想存储它们一次。
例如:职位和类别-多到多的关系。在抓取过程中,同一类别在不同的帖子中出现多次。这是我第一次将该类别保存到数据库中(创建新行)。如果同一类别出现在不同的post中,我希望将该帖子绑定到db中已经创建的行中。
我的问题是:我必须使用原子更新/插入(插入一个帖子、保存、get_or_create类别、保存、向多个表插入新行、保存)还是可以以某种方式使用大容量插入?解决这个问题最快的办法是什么?也许在进程之间共享一些临时表,这些表将在工作结束时进行批量插入?我在使用MySQL db。
答案和你的时间
发布于 2015-01-02 19:35:48
通过将unique=True
添加到字段或多列唯一索引中,可以依赖数据库强制执行唯一约束。还可以检查get/create和批量插入的文档:
发布于 2021-10-05 16:13:13
我自己找了一会儿,但找到了!
您可以使用on_conflict_replace()或on_conflict_ignore()函数来定义具有唯一性约束的表中存在记录时的行为。
PriceData.insert_many(values).on_conflict_replace().execute()
或
PriceData.insert_many(values).on_conflict_ignore().execute()
"Upsert“这里下的更多信息
https://stackoverflow.com/questions/27747096
复制相似问题