SQLAlchemy の監査 mixin に取り組んでいますが、これを行う方法が正確にはわかりません。
私のクラスは次のようになります。
class AuditColumns(object):
created_dt = Column(DateTime,
default=datetime.utcnow(),
nullable=False)
created_by = Column(String(64),
default=current_user,
nullable=False)
updated_dt = Column(DateTime,
default=datetime.utcnow(),
nullable=False,
onupdate=datetime.utcnow())
updated_by = Column(String(64),
default=current_user,
nullable=False,
onupdate=current_user)
テーブルレベルで最新の更新を記録するだけでよいので、更新されたものは問題ありません。重要な監査は、更新/削除などを詳述する別の表で行われます。
私の問題は; created_dt/by 列を更新したくありません。私のコードでは、オブジェクトを更新するときにそれらを単純に省略できます。しかし、別のコーダーはそうかもしれません。したがって、すべての更新の前に値をそれ自体でオーバーライドするか、誰かが値を変更しようとするとエラーが発生することを確認したいです (後者が推奨されます)。
私の SQLAlchemy スキルはまだ発展途上です。または、save() や before_save() などの一般的な宣言関数をオーバーライドすることでできることはありますか?
私は答えを探し続けます-しかし、解決策を見つけるのを手伝ってください(コードを与えられたくないでしょう)。