在MySQL中像TimeStamp这样的peewee中有DateTimeField的自动更新选项吗?

时间:2013-08-29 23:32:59

标签: mysql peewee

我想在每次修改记录时更新时间戳字段,就像在MySQL中一样。

DateTimeField(default=datetime.datetime.now())只会在第一次创建时设置它......

有没有简单的解决方案? 唯一的解决方案是手动设置MySQL db中的Column选项吗?

3 个答案:

答案 0 :(得分:30)

您可以覆盖模型类的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)

答案 1 :(得分:3)

在MySQL中使用TIMESTAMP类型。每当更新行时,此字段将自动更新。

model

last_updated = peewee.TimestampField()

答案 2 :(得分:-1)

您也可以覆盖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方法上做同样的事情