35

次のように定義された単純な 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 に非常に慣れていないので、それまでの経験がありません。

フィードバックをいただければ幸いです。

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]:引数に置き換えられましonupdateた。server_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 に答える