问题

博客刚部署到服务器上的时候发现一个奇怪的显现,写的所有的文章时间惊奇的一致。

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)