You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQLAlchemy中将字段转为PostgreSQL的TIMESTAMP WITH TIME ZONE

在SQLAlchemy中将DateTime字段转换为timestamptz(带时区的时间戳)

在PostgreSQL中,时间戳分为两种核心类型:

  • timestamp:对应TIMESTAMP WITHOUT TIME ZONE,不带时区信息的时间戳
  • timestamptz:对应TIMESTAMP WITH TIME ZONE,带时区信息的时间戳

在psql命令行中,两种转换的示例如下:

转换为不带时区的timestamp:

db=# select '2023-03-31 00:00:00'::timestamp;

      timestamp      
---------------------
 2023-03-31 00:00:00

转换为带时区的timestamptz:

db=# select '2023-03-31 00:00:00'::timestamptz;

      timestamptz       
------------------------
 2023-03-31 00:00:00+00

需求场景

你的模型中字段定义如下:

created_date = Column(DateTime, nullable=False, default=datetime.utcnow)

需要将该字段转换为timestamptz类型,以便在不同时区下提取日期相关信息。

实现方法

SQLAlchemy中,TIMESTAMP(timezone=True)对应PostgreSQL的TIMESTAMP WITH TIME ZONE类型,使用cast方法即可完成转换:

from sqlalchemy import TIMESTAMP

# 将created_date转换为timestamptz类型
Model.created_date.cast(TIMESTAMP(timezone=True))

如果要基于转换后的字段提取指定时区的日期信息,可以结合func.timezone函数使用,示例如下:

from sqlalchemy import func

# 将转换后的timestamptz转换为上海时区,并提取日期
func.date(func.timezone('Asia/Shanghai', Model.created_date.cast(TIMESTAMP(timezone=True))))

内容的提问来源于stack exchange,提问作者Mehrdad Pedramfar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:55:06