如何自动填充SQLAlchemy数据库字段? (烧瓶-SQLAlchemy的)

时间:2012-08-28 06:50:19

标签: database postgresql sqlalchemy flask flask-sqlalchemy

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

# 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()

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

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

会喜欢一些反馈,谢谢。

2 个答案:

答案 0 :(得分:61)

只需在列字段中添加server_defaultdefault参数:

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有关column insert/update defaults的文档。

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

[编辑2]:onupdate个参数替换server_onupdate

答案 1 :(得分: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())