And*_*sen 6 python postgresql sqlalchemy
这不是这个问题的重复,因为该问题可以使用参数或恒定间隔来解决。就我而言,间隔是在表中定义的。我的直觉表明以下应该有效:
from sqlalchemy import func
from sqlalchemy.dialects.postgresql import INTERVAL
...
company_uuid = 'some_uuid'
query = db.session.query(CompanyFlagEntity)\
.join(CompanyFlagTypeEntity)\ # implicit join using fk
.filter(CompanyFlagEntity.company_uuid == company_uuid)\
.filter((func.now() - INTERVAL(CompanyFlagTypeEntity.default_lookback_days, 'DAY')) <= CompanyFlagEntity.flag_date)
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
AttributeError: 'INTERVAL' object has no attribute 'comparator'
Run Code Online (Sandbox Code Playgroud)
SQL 版本为:
select company_flag.*
from company_flag
join company_flag_type on company_flag_type.uuid = company_flag.company_flag_type_uuid
where
company_flag.company_uuid = 'my_uuid' and
(now() - (company_flag_type.default_lookback_days || ' days')::interval) <= flag_date
Run Code Online (Sandbox Code Playgroud)
当我手动编写SQL时,解决方案掉了出来:
from sqlalchemy import func
from sqlalchemy.dialects.postgresql import INTERVAL
from sqlalchemy.sql.functions import concat
...
company_uuid = 'some_uuid'
query = db.session.query(CompanyFlagEntity)\
.join(CompanyFlagTypeEntity)\ # implicit join using fk
.filter(CompanyFlagEntity.company_uuid == company_uuid)\
.filter((func.now() - func.cast(concat(db_base_app.CompanyFlagTypeEntity.default_lookback_days, ' DAYS'), INTERVAL)) <= cls.flag_date)
Run Code Online (Sandbox Code Playgroud)
此引用有助于首先了解如何动态创建间隔。
| 归档时间: |
|
| 查看次数: |
3074 次 |
| 最近记录: |