python - Sqlalchemy 方言 DATERANGE 与 psycopg2.extras.DateRange 变化界限
问题描述
我需要更改我的 DATERANGE 列的范围。默认值为bounds='[)'
.
这是我当前的专栏:
from sqlalchemy.dialects.postgresql import DATERANGE
booked_date = Column(DATERANGE(), nullable=False)
问题是我无法对DATERANGE()
我的示例中的 做任何事情,它没有任何参数,也没有关于此的文档。我一直认为这DATERANGE()
来自psycopg2.extras.DateRange
,但似乎并非如此,因为根据文档DateRange 应该接受这些论点:
class psycopg2.extras.DateRange(lower=None, upper=None, bounds='[)', empty=False)
如何更改bounds
我的示例?
psycopg2.extras.DateRange
和 和有什么不一样sqlalchemy.dialects.postgresql import DATERANGE
?
编辑
我的专栏保持原样。但是我需要使用DateRange
from将 daterange 数据类型添加到数据库中psycopg2
:
un_daterange = DateRange(undate_lower.date(), undate_upper.date(), bounds="[]")
new_booking = UserBooksRoom(booked_date=un_daterange, date_added=datetime.today(),
booking_type='correction')
这里的问题是,如果我选择 21.01.2019 - 27.01.2019un_daterange
将如下所示:DateRange(datetime.date(2019, 1, 21), datetime.date(2019, 1, 27), '[]')
,这是正确的,但在数据库中它看起来像这样:[2019-01-21,2019-01-28)
。上限高出 1 天,为什么?我认为'[]'
意味着包括下限和上限。
此外,在检查预订是否可用时:
我选择日期 19.01.2019 - 21.01.2019,它会正确地告诉我这个日期不可用,因为 21.01.2019 是下限。
如果我选择 27.01.2019 - 30.01.2019 它也是正确的。
如果我选择 28.01.2019 - 30.01.2019,它将告诉日期可用。
所以总而言之它工作正常,date)
只是意味着date - 1 day
。但为什么会这么复杂?为什么bounds="[]"
不工作?
编辑
我再次检查,界限确实有效。如果没有 bound="[]" 它在数据库中看起来像这样:[2019-01-21,2019-01-27)
选择 27.01.2019 - 30.01.2019 会告诉我这是可能的,那是错误的。
.lower
基本上,当使用和向用户显示范围信息时.upper
,您需要从上限中减去 1 天。
解决方案
不同之处在于
psycopg2.extras.DateRange
表示一个 Postgresqldaterange
值。您基于每个值定义界限。sqlalchemy.dialects.postgresql.DATERANGE
来自 SQLAlchemy ,从限定名称中应该清楚,并且表示 Postgresqldaterange
type,如在CREATE TABLE
语句等中使用的那样。它不关心您存储在具有此类型的列中的值的范围。
回顾一下:在 SQLAlchemy 中DATERANGE
创建模型和Table
s 时用于定义列的类型DateRange
,如果使用 Psycopg2 作为 DB-API 驱动程序,则用于表示可以存储在此类列中的值。
推荐阅读
- python - PIL图像到numpy数组的Python转换非常慢
- python - Python:使用 .item() 打印字典时出错
- laravel - 获取queryScope结果槽whereHas使用haversine公式计算距离的方法
- sql - 匹配具有不同字符长度的 2 个字段,substr?填充?
- php - 如何在同一日期下显示多个帖子而不在循环中重复同一日期(php)
- api - GraphQL 字段解析器需要上下文信息
- php - 如何修复数组到字符串转换 Bootstrap PHP?
- c# - 回调与对象引用
- r - 在小图像 dataset.in r by keras 上训练 VGG16 时出错
- postgresql - PostgreSQL 图邻居查询慢