postgresql 为什么我的DateTime查询结果具有如此大的偏移量?

xpcnnkqh  于 2022-12-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(133)

我有一个SQLAlchemy column_property,用于从一组对象中获取最新的符合条件的DateTime,建模如下:

latest_released_date = column_property(
   select(
       Movie.release_date).where(
           Movie.release_date <= datetime.now(
               tz=timezone.utc)).order_by(
                   Movie.release_date.desc()).limit(
                       1).correlate_except(
                           Movie).scalar_subquery())

然而,它似乎没有返回最近的合格DateTime,而是返回null,即使我有一组对象具有合格的DateTime。
我手动创建了日期时间越来越早的对象,并且我会达到column_property开始返回值的点,但是有时日期时间必须有一个过去3天的偏移量,column_property才会发现它。
我确保以UTC时区保存所有日期时间,并且我的数据库和服务器都设置为UTC。

"release_date": "2022-12-16T11:36:46.974253" # doesn't show up as latest_released_date
"release_date": "2022-12-13T02:06:00" # does show up as latest_released_date
# results of checking tz.info, datetime.now() and datetime.utcnow()
"system_timezone": "UTC",
"now": "2022-12-17 02:45:08.911701",
"now_utc": "2022-12-17 02:45:08.911711+00:00"

以前有没有人遇到过这种情况,或者知道为什么会发生/如何修复?

hmae6n7t

hmae6n7t1#

问题确实在于datetime.now()在声明时只被调用一次,因此它总是保存我部署服务器时的值。我通过切换到www.example.com()中内置的SQLAlchemy(func.now而不是column_property中内置的SQLAlchemy)修复了这个问题,现在一切都按预期工作。

相关问题