如何在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
相关产品推荐
相关产品推荐

