Python 与sqlalchemy模型挂钩

Python 与sqlalchemy模型挂钩,python,orm,sqlalchemy,hook,Python,Orm,Sqlalchemy,Hook,我正在寻找sqlalchemy模型的模型创建周期。例如,在创建或保存时(就像在Ruby ORM ActiveRecord中一样,实际上我正在将一个模型从ActiveRecord移动到SqlAlchemy) 事件看起来像我需要的:,但我还没有找到更详细的示例。我想听听有人在这方面的经验 sqlalchemy中是否有类似的工具,用于根据特定提示(例如,创建后)使用模型/实例进行操作?一旦掌握了窍门,事件就非常简单了。 下面是一个使用事件的快速示例 import uuid from sqla

我正在寻找sqlalchemy模型的模型创建周期。例如,在创建或保存时(就像在Ruby ORM ActiveRecord中一样,实际上我正在将一个模型从ActiveRecord移动到SqlAlchemy)

事件看起来像我需要的:,但我还没有找到更详细的示例。我想听听有人在这方面的经验


sqlalchemy中是否有类似的工具,用于根据特定提示(例如,创建后)使用模型/实例进行操作?

一旦掌握了窍门,事件就非常简单了。 下面是一个使用事件的快速示例

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):
    …
这会回来的

NameError: name 'User' is not defined
NameError: name 'User' is not defined