Flask-SQLAlchemy-default-time-setting-problem

Flask之中sqlalchemy时间设置的问题

头像
逆旅 2022-08-03T21:00:31

1.遇到的问题

把flask时间 created 设置为UTC时间

class PyLink(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(300), nullable=False)
    link = db.Column(db.String(1000), nullable=False)
    avatar = db.Column(db.String(1000), nullable=False)
    brief = db.Column(db.String(1000), nullable=False)
    created = db.Column(db.DateTime, default=datetime.now)

修改添加timezone.utc参数

class PyLink(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(300), nullable=False)
    link = db.Column(db.String(1000), nullable=False)
    avatar = db.Column(db.String(1000), nullable=False)
    brief = db.Column(db.String(1000), nullable=False)
    created = db.Column(db.DateTime, default=datetime.now(timezone.utc))

之后的多条数据时间都为Flask的启动时间

2.问题原因

 1.created = db.Column(db.DateTime, default=datetime.now())

2. created = db.Column(db.DateTime, default=datetime.now)

1.中datetime.now()生成一个固定的时间, Flask程序部署的时间,所有的数据都是这个固定时间
2.datetime.now生成当前时间

3.解决办法

class PyLink(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(300), nullable=False)
    link = db.Column(db.String(1000), nullable=False)
    avatar = db.Column(db.String(1000), nullable=False)
    brief = db.Column(db.String(1000), nullable=False)
    created = db.Column(db.DateTime, default=datetime.utcnow)

把时间函数修改为datetime.utcnow

参考:Flask sqlalchemy 设置默认时间

最后修改: 2022-08-20T22:40:59

版权声明:署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)

comment 评论

验证图片
评论
仿 Valine