问题
博客刚部署到服务器上的时候发现一个奇怪的显现,写的所有的文章时间惊奇的一致。
Article 字段配置如下:
class Article(db.Model):
__tablename__ = 'article'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(64), index=True)
name = db.Column(db.String(64),index=True,unique=True)
content = db.Column(db.Text)
summary = db.Column(db.Text)
thumbnail = db.Column(db.String(200))
state = db.Column(db.Integer,default=0)
vc = db.Column(db.Integer,default=0)
timestamp = db.Column(db.DateTime, index=True, default=datetime.now()) # 创建时间
author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
tags = db.relationship('Tag',secondary=article_tag,backref=db.backref('articles',lazy='dynamic'),lazy='dynamic')
其中创建时间字段的设置是:
timestamp = db.Column(db.DateTime, index=True, default=datetime.now()) # 创建时间
这里我的默认时间设置是:
default=datetime.now()
这里datetime.now() 是有问题的,这个值会成为程序启动瞬间获取的系统时间,一直保持不便,经查询才发现 flask-sqlalchemy model字段默认时间应该是datetime.now 才是插入数据库记录时记录的时间.
解决
记录插入数据库的时间应该是:
timestamp = db.Column(db.DateTime, index=True, default=datetime.now) # 创建时间
更新时间应该是:
timestamp = db.Column(db.DateTime, index=True, default=datetime.now ,onupdate=datetime.now)