gpt4 book ai didi

python - Sqlalchemy 方言 DATERANGE 与 psycopg2.extras.DateRange 更改边界

转载 作者:行者123 更新时间:2023-12-01 01:21:43 27 4
gpt4 key购买 nike

我需要更改 DATERANGE 列的范围。默认值为 bounds='[)'

这是我当前的专栏:

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

问题是我无法在示例中使用 DATERANGE() 执行任何操作,它没有任何参数,并且没有相关文档。我一直认为这个 DATERANGE() 来自 psycopg2.extras.DateRange,但事实似乎并非如此,因为根据 docs DateRange 应接受以下参数:

class psycopg2.extras.DateRange(lower=None, upper=None, bounds='[)', empty=False)

如何更改示例中的边界

psycopg2.extras.DateRange 和 sqlalchemy.dialects.postgresql import DATERANGE 之间的区别在哪里?

编辑

我的专栏保持原样。但我需要使用 psycopg2 中的 DateRange 将日期范围数据类型添加到数据库:

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 是下限。

如果我选择27.01.2019 - 30.01.2019,它也是正确的。

如果我选择 28.01.2019 - 30.01.2019,它会告诉您该日期可用。

所以总而言之,它工作正常,date) 只是意味着 date - 1 天。但为什么这么复杂呢?为什么 bounds="[]" 不起作用?

编辑

我再次检查,边界确实有效。如果没有bound="[]",它在数据库中看起来像这样:[2019-01-21,2019-01-27)并选择27.01.2019 - 30.01.2019会告诉我它这是可能的,但那是错误的。

基本上,当使用 .lower.upper 向用户显示范围信息时,您需要从上限中减去 1 天。

最佳答案

不同的是

  • psycopg2.extras.DateRange 表示 Postgresql daterange 。您可以在每个值的基础上定义界限。
  • sqlalchemy.dialects.postgresql.DATERANGE来自 SQLAlchemy,从限定名称中应该可以清楚地看出,它代表一个 Postgresql daterange < strong>type,如在CREATE TABLE语句等中使用。它不关心您存储在具有此类型的列中的的范围。

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

关于python - Sqlalchemy 方言 DATERANGE 与 psycopg2.extras.DateRange 更改边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53758700/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com