SQLAlchemy query.first() 在每次执行新查询函数时查找下一个条目

问题描述

我在烧瓶中运行一个爬虫蜘蛛,并使用烧瓶 sqlAlchemy 将数据添加到 postgres 数据库。蜘蛛有一个 process_item 函数,每次从网站收集数据时都会执行该函数。每次抓取网站时,该网站都会添加merchants 表中并分配一个唯一 ID。此 ID 存储在变量 merchant_id 中,并用作在 requisites 表中查找第一个条目以更新表的 11 列之一的关系。

这是我使用的函数

def process_item(self,item,spider):
    requisite = Requisites.query.filter_by(merchant_id=self.merchant_id).first()
    if requisite:
        print(f"requisite True - {requisite}")
        for key in item:
            exec(f"requisite.{key} = item['{key}']")
            db.session.commit()
    else:
        print(f"requisite False - {requisite}")
        requisite = Requisites(website=self.website,merchant_id=self.merchant_id)
        db.session.add(requisite)
        for key in item:
            exec(f"requisite.{key} = item['{key}']")
            db.session.commit()
    return item

在我的 requisites 表中,我总共有五个具有相同 merchant_id 的条目。这些条目中的每一个requisites 表中都有自己的唯一 ID。 我注意到只有在第一次执行 process_item 时才会填充第一条记录。所以我在函数添加print(f"requisite True - {requisite}") 并注意到每次执行查询时都会返回 requisites 表中的下一个条目,而不是第一个条目,尽管我使用了 .first()。为什么会发生这种情况以及如何解决这个问题? 这是每次执行 process_item 时打印的内容

requisite True - <Requisites 3>
requisite True - <Requisites 4>
requisite True - <Requisites 5>
requisite True - <Requisites 6>

这就是 requisites 表的样子

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)