35

我有一个简单的用户模型,定义如下:

# models.py
from datetime import datetime
from myapp import db

class User(db.Model):
  id = db.Column(db.Integer(), primary_key=True)
  email = db.Column(db.String(100), unique=True)
  password = db.Column(db.String(100))
  date_updated = db.Column(db.DateTime())

  def __init__(self, email, password, date_updated=None):
    self.email = email
    self.password = password
    self.date_updated = datetime.utcnow()

当我创建一个新的用户对象时,我的date_updated字段被设置为当前时间。我想做的是这样我保存对我的用户对象的更改时,我的date_updated字段会自动设置为当前时间。

我已经搜索了文档,但是对于我的生活,我似乎找不到任何对此的参考。我对 SQLAlchemy 很陌生,所以我真的没有任何经验可以借鉴。

希望得到一些反馈,谢谢。

4

2 回答 2

78

只需向列字段添加server_default或参数:default

created_on = db.Column(db.DateTime, server_default=db.func.now())
updated_on = db.Column(db.DateTime, server_default=db.func.now(), server_onupdate=db.func.now())

我更喜欢{created,updated}_on列名。;)

SQLAlchemy 文档关于列插入/更新默认值

[编辑]:更新代码以server_default在代码中使用参数。

[编辑 2]:替换onupdateserver_onupdate参数。

于 2012-08-28T08:46:52.190 回答
5
date_created  = db.Column(db.DateTime,  default=db.func.current_timestamp())
date_modified = db.Column(db.DateTime,  default=db.func.current_timestamp(),
                                       onupdate=db.func.current_timestamp())
于 2015-11-27T05:50:37.750 回答