python - SQLAlchemy query.first() 在每次执行新时间查询函数时查找下一个条目
问题描述
我在烧瓶中运行一个scrapy spider,并使用flask-SQLAlchemy 将数据添加到postgres db。蜘蛛具有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
。这些条目中的每一个在表中都有自己的唯一 ID requisites
。我注意到第一条记录仅在第一次process_item
执行时才被填充。所以我添加print(f"requisite True - {requisite}")
到函数中并注意到每次执行它时,查询都会返回必需表中的下一个条目,而不是第一个条目,尽管我使用了 .first()。为什么会发生这种情况以及如何解决这个问题?这是每次process_item
执行时打印的内容:
requisite True - <Requisites 3>
requisite True - <Requisites 4>
requisite True - <Requisites 5>
requisite True - <Requisites 6>
解决方案
推荐阅读
- delphi - 右键单击不会更新 TControlList 中的 ItemIndex
- php - Laravel 重定向返回问题
- c++ - 当基类没有虚拟析构函数时,将模拟作为 unique_ptr 传递
- spring - 在 spring security UI grails 插件中添加更多属性
- r - 从字符串中提取特定值
- pandas - 从某些列值中删除一个字符串,然后对它们进行操作 Pandas
- reactjs - 如何防止 useEffect 上一个是屏幕
- javascript - 如何在 puppeteer 中使用 setTimeout
- c# - 我应该如何计算 Lerp 的速度?
- laravel - Laravel Livewire:日期选择器输入被擦除,无法提交