繁体   English   中英

使用 peewee 进行多处理批量插入

[英]Bulk insert with multiprocessing using peewee

我正在使用 Python 3.4 中的简单 html 抓取工具,使用 peewee 作为 ORM(顺便说一句,很棒的 ORM。),我的脚本需要一堆站点,提取必要的数据并将它们保存到数据库中,但是每个站点都在分离过程中被抓取。 为了提高性能,保存的数据应该是唯一的,不仅在站点之间,而且在特定站点上都可能存在重复数据。 所以我只想将它们存储一次。

示例:帖子和类别 - 多对多关系。 在抓取过程中,同一类别在不同帖子中出现多次。 我第一次想将该类别保存到数据库(创建新行)。 如果同一类别出现在不同的帖子中,我想将该帖子与数据库中已创建的行绑定。

我的问题是 - 我是否必须使用原子更新/插入(插入一个帖子,保存,get_or_create 类别,保存,将新行插入多对多表,保存)或者我可以以某种方式使用批量插入? 解决该问题最快的方法是什么? 也许一些进程之间共享的临时表,将在工作结束时批量插入? 我正在使用 MySQL 分贝。

谢谢你的答案和你的时间

您可以通过向字段或多列唯一索引添加unique=True来依赖数据库来强制执行唯一约束。 您还可以查看get / create和批量插入的文档:

自己找了好久,终于找到了!

您可以使用 on_conflict_replace() 或 on_conflict_ignore() 函数来定义当记录存在于具有唯一性约束的表中时的行为。

PriceData.insert_many(values).on_conflict_replace().execute()

或者

PriceData.insert_many(values).on_conflict_ignore().execute()

此处“Upsert”下的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM