0

SQLAlchemy を使用して Python プロジェクトに取り組んでいます。私は次のクラスを持っています(質問に関係のないいくつかのメソッドを省略しました):

class Cmd(Base):
    __tablename__ = "commands"
    dbid = Column(Integer, Sequence("commands_seq"), primary_key = True)
    cmd_id = Column(SmallInteger)
    instance_dbid =  Column(Integer, ForeignKey("instances.dbid"))
    type = Column(String(20))

    __mapper_args__ = {
    "polymorphic_on" : type,
    "polymorphic_identity" : "Cmd"
    }

    def __init__(self, cmd_id):
        self.cmd_id = cmd_id
        self.cmd_name = event_names[self.cmd_id]

ご覧のとおり、クラスのインスタンスを初期化すると、リストを使用して属性cmd_nameから属性が作成されます(これも省略されています。コマンド名を含む単純なリストです)。cmd_idevent_names

オブジェクトを作成しCmd、セッションを追加し、セッションをコミットします。アプリケーションを閉じて再度起動した後、CmdSQLAlchemy クエリを使用してこれをロードしようとしました。オブジェクトはロードされますが、もちろん__init__呼び出されcmd_nameず、設定もされません。

クエリでオブジェクトをself.cmd_name = event_names[self.cmd_id]取得した後、いくつかのコード ( ) を実行する簡単な方法があるかどうかを知りたいです。Cmdもちろん、特別な方法を実行して、クエリの後に常に起動することもできますが、よりエレガントで自動的な方法を探しています。

ドキュメントを読んで、ORM イベント リスナーに関する情報を見つけましたが、このような単純なケースには多すぎるようです。属性イベントに関する記事も見つけましたが、それらはのみで機能しcolumn_propertyますrelationship。私が望むものを達成するための短くてエレガントな方法はありますか?

4

1 に答える 1