仅在满足另一个条件时如何按列过滤查询
Posted
技术标签:
【中文标题】仅在满足另一个条件时如何按列过滤查询【英文标题】:How to filter a query by columns only if another condition is met 【发布时间】:2021-07-14 07:39:28 【问题描述】:我有一个问题:
query = Usage.query.filter_by(site_id=self.site_id, invoice_num=self.invoice_num, supply_charge=self.supply_charge)
想要按日期过滤:
.filter(Usage.start_date>four_months_ago)
仅当被过滤的行具有相同的值时:
if subtotal == self.subtotal
有没有比创建 for 循环更好的方法?看起来效率很低。
for row in query.all():
if self.start_date > four_months_ago:
if row.subtotal != self.subtotal:
del row
【问题讨论】:
【参考方案1】:条件
(subtotal == self.subtotal) & (Usage.start_date > four_months_ago)
看起来像
WHERE start_date > 'val1' AND subtotal = val2
否则,OR subtotal != val2
。您可以尝试使用or_
+ and_
。只是一个例子:
subtotal = 1
for user in Usage.query.filter(
Usage.site_id == 2,
Usage.invoice_num == 3,
Usage.supply_charge == 4,
or_(
and_(Usage.start_date > for_month_ago, Usage.subtotal == subtotal),
Usage.subtotal != subtotal,
)
):
print(user)
【讨论】:
以上是关于仅在满足另一个条件时如何按列过滤查询的主要内容,如果未能解决你的问题,请参考以下文章
如何制作 Segue Pass 数据并且仅在满足某些条件时执行