我想一个时间戳字段更新记录每次被修改一样,在MySQL。DateTimeField(default=datetime.datetime.now())只会在第一次创建时设置它...有没有简单的解决方案?唯一的解决方案是手动设置mysqdb中的列选项?
DateTimeField(default=datetime.datetime.now())
5cg8jx4n1#
您可以重写模型类上的save方法。
save
class Something(Model): created = DateTimeField(default=datetime.datetime.now) modified = DateTimeField def save(self, *args, **kwargs): self.modified = datetime.datetime.now() return super(Something, self).save(*args, **kwargs)
kmb7vmvb2#
只要在MySQL中使用TIMESTAMP类型即可。每当行更新时,此字段将自动更新。在model:
model
last_updated = peewee.TimestampField()
omjgkv6w3#
你也可以重写update方法来提供。就像coleifer所做的那样:
update
class Something(Model): created = DateTimeField(default=datetime.datetime.now) modified = DateTimeField @classmethod def update(cls, *args, **kwargs): kwargs['modified'] = datetime.datetime.now() return super(Something, cls).save(*args, **kwargs) def save(self, *args, **kwargs): self.modified = datetime.datetime.now() return super(Something, self).save(*args, **kwargs)
也可以对replace方法执行相同的操作
replace
waxmsbnn4#
from datetime import datetime from peewee import (AutoField, CharField, DateTimeField, FloatField, IntegerField, Model, MySQLDatabase, TextField, SQL) from config import DataBaseConfig mysql_client = MySQLDatabase( "your_database_name", host=DataBaseConfig.host, port=DataBaseConfig.port, user=DataBaseConfig.user, password=DataBaseConfig.password, ) class CommonModel(Model): id = AutoField(verbose_name="primary key") create_time = DateTimeField(default=datetime.now, verbose_name="create time") update_time = DateTimeField(default=datetime.now, verbose_name="update time", constraints=[SQL('ON UPDATE CURRENT_TIMESTAMP')]) class Meta: database = mysql_client
可以参考此文档,单列索引和约束!
4条答案
按热度按时间5cg8jx4n1#
您可以重写模型类上的
save
方法。kmb7vmvb2#
只要在MySQL中使用TIMESTAMP类型即可。每当行更新时,此字段将自动更新。
在
model
:omjgkv6w3#
你也可以重写
update
方法来提供。就像coleifer所做的那样:也可以对
replace
方法执行相同的操作waxmsbnn4#
可以参考此文档,单列索引和约束!