我需要更改DATERANGE列的界限。默认值是bounds='[)'
。在
这是我当前的专栏:
from sqlalchemy.dialects.postgresql import DATERANGE
booked_date = Column(DATERANGE(), nullable=False)
问题是我不能用DATERANGE()
做任何事情,在我的例子中,它没有任何参数,也没有相关的文档。我一直认为这个DATERANGE()
来自psycopg2.extras.DateRange
,但似乎不是这样,因为根据docs日期范围,应该接受以下参数:
如何更改示例中的bounds
?在
psycopg2.extras.DateRange
和{
编辑
我的专栏保持原样。但是我需要通过使用DateRange
frompsycopg2
向数据库添加日期范围数据类型:
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.2019 un_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是下限。在
如果我选择2019年1月27日至2019年1月30日,也将是正确的。在
如果我选择28.01.2019-30.01.2019,它会告诉你日期是可用的。在
总而言之,它是正确的,date)
只是date - 1 day
的意思。但为什么这么复杂?为什么bounds="[]"
不起作用?在
编辑
我又检查了一下,边界确实起作用了。如果不使用bound=“[]”,那么在DB:[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
类型,如CREATE TABLE
语句等。它不关心存储在具有此类型的列中的值的边界。在回顾一下:在SQLAlchemy中创建模型和
Table
时使用DATERANGE
来定义列的类型,如果使用Psycopg2作为DB-API驱动程序,则使用DateRange
表示可以存储在此类列中的值。在相关问题 更多 >
编程相关推荐