You need to enable JavaScript to run this app. Flask SQLAlchemy模型如何将date_created默认时间设为GMT-6时区
优惠活动
大模型
产品
解决方案
定价
更多

Flask SQLAlchemy模型如何将date_created默认时间设为GMT-6时区

实现方法

要直接存储GMT-6时区的原生时间、不对存储流程加后处理,核心是给date_created字段提供一个可动态生成GMT-6当前时间的默认值函数,全程传入不带时区信息的naive datetime对象,避免数据库驱动自动做时区转换。

具体步骤

  1. 先导入需要的时间计算依赖:
from datetime import datetime, timedelta
  1. 编写专属的时间生成函数——GMT-6时区的时间比UTC时间慢6小时,直接基于UTC当前时间做偏移计算即可,不要引入带时区元数据的对象:
def get_gmt_minus6_time():
    # 计算得到naive格式的GMT-6当前时间,不附带时区标识
    return datetime.utcnow() - timedelta(hours=6)
  1. 把这个函数作为默认值传给模型字段,注意不要在函数名后加括号,要传入可调用对象本身:
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    date_created = db.Column(db.DateTime, nullable=False, default=get_gmt_minus6_time)

关键注意事项

  • 不要把default值写成default=get_gmt_minus6_time():这种写法会在模型类被加载时就生成一个固定时间,后续所有新建用户的创建时间都会和这个固定值完全一致,是常见的逻辑错误。
  • 不要传入带时区信息的datetime对象:如果使用pytz等库生成附带GMT-6时区标识的时间对象,数据库驱动在写入时往往会自动将其转换为UTC格式存储,完全违背“不对存储数据做后处理”的要求。
  • 不要直接使用无参数的datetime.now():这个方法会读取服务器所在主机的本地时区时间,一旦部署环境的时区和目标GMT-6不一致,写入的时间值就会出现偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 11:36:03