我正在寻找sqlalchemy模型的模型创建周期。例如,在创建或保存时(例如在Ruby ORM ActiveRecord中,实际上我正在将模型从ActiveRecord移动到SqlAlchemy)。
事件看起来像我需要的:http://docs.sqlalchemy.org/en/rel_0_7/core/event.html,但我还没有找到更详细的例子。我想听听别人对此的体验。
sqlalchemy中是否有基于某些提示的模型/实例做事的类似设施,例如: after_create?
答案 0 :(得分:16)
一旦掌握了它,事件就非常简单了。 以下是使用事件的简单示例
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):
…
答案 1 :(得分: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