gpt4 book ai didi

postgresql - 使用 luigi 更新 Postgres 表

转载 作者:行者123 更新时间:2023-11-29 11:49:36 25 4
gpt4 key购买 nike

我刚刚开始使用 luigi 库。我定期抓取网站并将任何新记录插入 Postgres 数据库。当我试图重写部分脚本以使用 luigi 时,我不清楚 "marker table" 是如何实现的应该使用。

工作流程:

  1. 抓取数据
  2. 查询数据库以检查新数据是否与旧数据不同。
  3. 如果是,将新数据存储在同一个表中。

但是,使用 luigi 的 postgres.CopyToTable,如果表已经存在,则不会插入新数据。我想我应该使用 table_updates 表中的 inserted 列来确定应该插入哪些新数据,但我不清楚该过程是什么样的,我可以'在网上找到任何明确的例子。

最佳答案

你不必太担心标记表:它是 luigi 用来跟踪哪个任务已经成功执行的内部表。为此,luigi 使用任务的 update_id 属性。如果你没有声明一个,那么 luigi 将使用 task_id as shown here .该 task_id 是任务系列名称和任务的前三个参数的串联。

此处的关键是覆盖您任务的 update_id 属性并返回一个自定义字符串,您知道该字符串对于您的任务的每次运行都是唯一的。通常你应该使用任务的重要参数,比如:

@property
def update_id(self):
return ":".join(self.param1, self.param2, self.param3)

显着是指改变任务输出的参数。我想象像网站 url o id 和抓取日期这样的参数。数据库的主机名、端口、用户名或密码等参数对于任何这些任务都是相同的,因此不应将它们视为重要参数。

请注意,如果没有关于您的表和您尝试保存的数据的详细信息,很难说出您必须如何构建该 update_id 字符串,因此请小心。

关于postgresql - 使用 luigi 更新 Postgres 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40707004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com