【问题标题】:Hooking into sqlalchemy models挂钩到 sqlalchemy 模型
【发布时间】:2012-09-20 12:34:17
【问题描述】:
【问题讨论】:
标签:
python
orm
sqlalchemy
hook
【解决方案1】:
一旦掌握了窍门,事件就会变得非常简单。
这是一个使用事件的简单示例
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):
…
【解决方案2】:
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