Flask sqlalchemy 设置默认时间

记录第一次创建时间: default

最近发现程序中凡存在默认时间的部分,经常出现多条记录create_time时间一致的情况,而实际上创建时间明明差的很多
一番debug之后发现坑在这里:

falsk中如下两个字段

1
2
3
create_time1 = db.Column(db.DateTime, default=datetime.now)

create_time2 = db.Column(db.DateTime, default=datetime.now())

两者的区别:

第一个插入的是期望的, 数据的插入时间,每条数据插入时可自动根据当前时间生成

第二条是一个固定的时间, 程序部署的时间,所有的数据都是这个固定时间

实际上默认值在mysql数据库没有体现, 都是sqlalchemy在插入数据时加的


如果想想在生成的table中有默认值使用: server_default

1
name = db.Column(db.String(45), server_default='hh')

当我们要给布尔值类型指定server_default时,需要用到text

1
2
from sqlalchemy import text
is_domain = db.Column(db.Boolean,default=False,server_default=text('0'))

因为mysql的datetime类型的数据不支持函数, 所以没法指定默认值位当前时间

记录每次修改的时间: onupdate

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