Jul*_*ian 0 python postgresql sqlalchemy psycopg2
SQLAlchemy的支持Postgres的范围的类型,如所描述的在这里。它使用postgresql+psycopg2方言进行 Postgres 通信。这些测试用例给出了 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)
)
Run Code Online (Sandbox Code Playgroud)
例如,我想过滤在给定日期时间开始的期间的预订,或者在日期时间开始之前对预订进行排序。
因此,我希望大致生成此 SQL:
SELECT room, during
FROM room_booking
WHERE lower(during) = foo
ORDER BY upper(during)
Run Code Online (Sandbox Code Playgroud)
我试过像这样的结构
RoomBooking.query.filter(RoomBooking.during.lower == foo).order_by(RoomBooking.during.upper)
Run Code Online (Sandbox Code Playgroud)
但要认识到这可能不起作用,因为 lower 是 python 对象上的一个属性,与基础表列无关。
一个可能的解决方案可能是找到一种使用upper()/lower()SQLAlchemy 范围函数的方法。
一种方法是使用func.lower()/func.upper()sqlalchemy 中已经存在的方法:
from sqlalchemy import func
RoomBooking.query.filter(func.lower(RoomBooking.during) == foo).order_by(func.upper(RoomBooking.during))
Run Code Online (Sandbox Code Playgroud)
这些方法可能是为了支持(取消)大写文本而引入的——看看其他不可用的 postgres 函数是否也可以以类似的方式实现会很有趣。
| 归档时间: |
|
| 查看次数: |
1516 次 |
| 最近记录: |