2010-09-04 53 views
3

有一个页面展示了如何做到这一点使用药剂时:如何将事件回调添加到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_insertbefore_delete方法。我该怎么办?

回答

4

您的问题的答案是使用扩展名(MapperExtension,SessionExtension ...),如here所述。

但是你几乎肯定不想做任何事情,比如像在这样的钩子中发送电子邮件。正确的方法是在事务完成后记录操作并后处理日志条目。

[编辑] sqlalchemy文档已经改变;处理此问题的新方法是使用ORM Events

+1

感谢您对'此处不发送电子邮件'的建议,这非常重要。而且,现在,我按照您给我的页面进行了一些回调,但还有一个问题。你能帮我:http://stackoverflow.com/questions/3646486 – Freewind 2010-09-05 16:06:48

相关问题