【发布时间】:2015-01-06 21:22:28
【问题描述】:
SQLAlchemy 支持 Postgres 范围类型,如 here 所述。它使用postgresql+psycopg2 方言进行 Postgres 通信。 These testcases 给出 SQLALchemy 中范围类型的使用示例。
如何在 SQLAlchemy 中按此类范围字段的一个组件(下限或上限)进行过滤或排序?
使用第一个链接中的示例
from psycopg2.extras import DateTimeRange
from sqlalchemy.dialects.postgresql import TSRANGE
class RoomBooking(Base):
__tablename__ = 'room_booking'
room = Column(Integer(), primary_key=True)
during = Column(TSRANGE())
booking = RoomBooking(
room=101,
during=DateTimeRange(datetime(2013, 3, 23), None)
)
例如,我想过滤从给定日期时间开始的预订,或在日期时间开始之前订购预订。
因此,我希望大致生成以下 SQL:
SELECT room, during
FROM room_booking
WHERE lower(during) = foo
ORDER BY upper(during)
我尝试过类似的结构
RoomBooking.query.filter(RoomBooking.during.lower == foo).order_by(RoomBooking.during.upper)
但要认识到这可能不起作用,因为 lower 是 python 对象上的一个属性,并且与基础表列无关。
一个可能的解决方案可能是找到一种方法来使用 SQLAlchemy 中的 upper()/lower() 范围函数。
【问题讨论】:
标签: python postgresql sqlalchemy psycopg2