sqlalchemy Table中Column(BigInteger, default=int(time.time()))每次保存的值都是一样的

问题

当我们需要记录数据的插入时间的时候常用到这样的保存方法

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)

版权声明:本文为weixin_44720938原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。