SQLAlchemyデータベースを使用しています。SQLAlchemyテーブル内の列のSHA-1チェックサムを別の列として自動的に追加します
私はカラムid
,data
、およびtimestamp
という簡単なスキーマを持っています。私はdata
列のSHA-1チェックサムを含む別の列を追加したい
Column('timestamp', DateTime, nullable=False, default=datetime.now)
次のようtimestamp
列が自動的に現在の日付/時刻が移入されます。
# notice this is INVALID CODE
Column('checksum', String, nullable=False, unique=True,
default=hashlib.sha1(this_table.data).hexdigest())
何か提案がありますか?
ありがとうございます。
編集:
私はこれに来ている最も近いオブジェクトレベル(テーブルレベルではなく)で「自動化」を管理することです。私は単に
Column('checksum', String, nullable=False, unique=True)
としてchecksum
列を定義して、そのテーブルにマップされたオブジェクトのコンストラクタを変更します。期待どおりに動作します
def __init__(self, data):
self.data = data
self.checksum = hashlib.sha1(self.data).hexdigest()
が、実行する方法があるかどうか私はまだ疑問に思いますこれは「テーブル」レベル(timestamp
のようにオブジェクトレベルでは何もしませんが、現在の日付/時刻を正しく割り当てます)
また、SqlAlchemy 0.7は完全なイベントベースにリファクタリングされています。そのことを確認できます。http://www.sqlalchemy.org/docs/orm/events.html – Rick
非常に便利な拡張機能 - 多くの感謝! – Escualo