问题
当我们需要记录数据的插入时间的时候常用到这样的保存方法
create_time = Column(BigInteger, default=int(time.time()))
update_time = Column(BigInteger, default=int(time.time()))
但当我们在插入数据时,不手动设置create_time字段而是通过默认值设置,发现每一次设置的值都是相同的。
出现原因
这样的写法会导致sqlalchemy将初始化时生成的int(time.time())的结果当作一个常量保存下来,作为default的值。
正确的写法应该是传入生成默认值的函数到default中。
解决方案
将以上代码更改为
create_time = Column(BigInteger, default=lambda: int(time.time()))
update_time = Column(BigInteger, default=lambda: int(time.time()))
如果是使用时间格式,而不是时间戳的话
created_time = Column(TIMESTAMP, default=datetime.now)
updated_time = Column(TIMESTAMP, default=datetime.now, onupdate=datetime.now)