13

sqlalchemyモデルのモデル作成サイクルに接続したいと考えています。たとえば、作成時または保存時(Ruby ORM ActiveRecordのように、実際にはモデルをActiveRecordからSqlAlchemyに移動しています)。

イベントは私が必要としているもののように見えます:http://docs.sqlalchemy.org/en/rel_0_7/core/event.html、しかし私はまだより詳細な例を見つけていません。これについて誰かの経験を聞きたいです。

sqlalchemyには、after_createなどの特定のキューに基づいてモデル/インスタンスを使用して処理を実行するための同様の機能がありますか?

4

2 に答える 2

28

一度コツをつかめば、イベントはとてもシンプルです。イベントを使用した簡単な例を次に示します

import uuid    

from sqlalchemy.event import listen

from mypackage.models import Base


def generate_license(mapper, connect, target):
    target.generate_license()

class User(Base):
    __tablename__ = "users"
    id = Column(String(36))
    license = Column(String(256))

    def generate_license(self):
        if not self.license:
            self.license = str(uuid.uuid4())
        return self.license

listen(User, 'before_insert', generate_license)

または、デコレータを使用することもできます。

from sqlalchemy.event import listens_for
…
class User(Base):
    …

@listens_for(User, 'before_insert')
def generate_license(mapper, connect, self):
    …
于 2012-09-20T13:39:50.783 に答える
8
from sqlalchemy.event import listen_for
…
class User(Base):
…
    @listen_for(User, 'before_insert')
    @staticmethod
    def generate_license(mapper, connect, self):
…

これは戻ります

NameError: name 'User' is not defined
于 2014-10-28T14:37:01.733 に答える