SQLAlchemy定了一个model,如下:

1
2
3
4
5
6
7
class PostContent(db.Model):
__tablename__ = 'a_post_contents'

id = db.Column(db.Integer, primary_key=True)
content = db.Column(db.BLOB)
created_at = db.Column(db.DateTime, default=datetime.now())
updated_at = db.Column(db.DateTime, default=datetime.now(), onupdate=datetime.now())

运行后发现新插入的数据的created_at字段的值都是一样的。

原因

created_at的默认值datetime.now(),在编译的时候就会被执行输出当前时间,后面的实例都会使用这个时间。

解决

created_at的默认值应该是datetime.now,不能加括号。

代码修改如下:

1
2
3
4
5
6
7
class PostContent(db.Model):
__tablename__ = 'a_post_contents'

id = db.Column(db.Integer, primary_key=True)
content = db.Column(db.BLOB)
created_at = db.Column(db.DateTime, default=datetime.now)
updated_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)