SQL炼金术方言DATERANGE与psycopg2。附加日期范围改变界限

2024-10-04 05:26:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要更改DATERANGE列的界限。默认值是bounds='[)'。在

这是我当前的专栏:

from sqlalchemy.dialects.postgresql import DATERANGE
booked_date = Column(DATERANGE(), nullable=False)

问题是我不能用DATERANGE()做任何事情,在我的例子中,它没有任何参数,也没有相关的文档。我一直认为这个DATERANGE()来自psycopg2.extras.DateRange,但似乎不是这样,因为根据docs日期范围,应该接受以下参数:

^{pr2}$

如何更改示例中的bounds?在

psycopg2.extras.DateRange和{}之间的区别在哪里?在

编辑

我的专栏保持原样。但是我需要通过使用DateRangefrompsycopg2向数据库添加日期范围数据类型:

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天。在


Tags: 数据库编辑extras参数datetimedatepsycopg2un
1条回答
网友
1楼 · 发布于 2024-10-04 05:26:19

不同的是

  • psycopg2.extras.DateRange表示Postgresqldaterange。您可以按每个值定义边界。在
  • sqlalchemy.dialects.postgresql.DATERANGE是来自SQLAlchemy的,从限定名中应该可以清楚地看到,它表示一个Postgresqldaterange类型,如CREATE TABLE语句等。它不关心存储在具有此类型的列中的的边界。在

回顾一下:在SQLAlchemy中创建模型和Table时使用DATERANGE来定义列的类型,如果使用Psycopg2作为DB-API驱动程序,则使用DateRange表示可以存储在此类列中的值。在

相关问题 更多 >