如何将事件回调添加到sqlalchemy模型?
问题描述:
有一个页面展示了如何做到这一点使用药剂时:如何将事件回调添加到sqlalchemy模型?
http://beachcoder.wordpress.com/2007/05/02/adding-event-callbacks-to-sqlalchemyelixir-classes/
但我不使用药剂,我只是用sqlalchemy
直接,并定义我的模型为:
Base = declarative_base()
class User(Base):
__tablename__ = "users"
...
def send_email(self):
# send email to the user
而我想要做的是:
class User(Base):
__tablename__ = "users"
...
before_insert('init_user', 'send_email')
before_delete('something_before_delete')
def init_user(self):
# init some data of the user
def send_email(self):
# send email to the user
def something_before_delete(self):
# something before delete
注意before_insert
和before_delete
方法。我该怎么办?
答
您的问题的答案是使用扩展名(MapperExtension,SessionExtension ...),如here所述。
但是你几乎肯定不想做任何事情,比如像在这样的钩子中发送电子邮件。正确的方法是在事务完成后记录操作并后处理日志条目。
[编辑] sqlalchemy文档已经改变;处理此问题的新方法是使用ORM Events
感谢您对'此处不发送电子邮件'的建议,这非常重要。而且,现在,我按照您给我的页面进行了一些回调,但还有一个问题。你能帮我:http://stackoverflow.com/questions/3646486 – Freewind 2010-09-05 16:06:48