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

rde*_*ges 30 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()
Run Code Online (Sandbox Code Playgroud)

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

我已经搜索了文档,但对于我的生活,我似乎无法找到任何参考.我对SQLAlchemy很新,所以我真的没有任何经验可以借鉴.

会喜欢一些反馈,谢谢.

pla*_*aes 65

只需添加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())
Run Code Online (Sandbox Code Playgroud)

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

SQLAlchemy有关列插入/更新默认值的文档.

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

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


Sav*_* KP 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())
Run Code Online (Sandbox Code Playgroud)