web-dev-qa-db-ja.com

SQLAlchemyデータベースのフィールドに自動的に入力する方法はありますか(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に非常に慣れていないので、引き出す経験がまったくありません。

いくつかのフィードバックが欲しいと思います、ありがとう。

30
rdegges

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引数に置き換えました。

64
plaes
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())
5
Savad KP