次のように定義された単純な User モデルがあります。
# 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
に現在の時刻が設定されます。私がやりたいのは、いつでもUser オブジェクトに変更を保存すると、フィールドdate_updated
は自動的に現在の時刻に設定されます。
ドキュメントを徹底的に調べましたが、これに関する参照がまったく見つかりません。SQLAlchemy についてはまだ初心者なので、参考にできる経験はまったくありません。
フィードバックをいただければ幸いです。ありがとうございます。
ベストアンサー1
列フィールドに引数を追加する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]:onupdate
引数に置き換えられましたserver_onupdate
。