Как добавить обратные вызовы событий в модели sqlalchemy? - PullRequest
3 голосов
/ 04 сентября 2010

Существует страница, демонстрирующая, как это сделать при использовании Elixir:

http://beachcoder.wordpress.com/2007/05/02/adding-event-callbacks-to-sqlalchemyelixir-classes/

Но я не использую Elixir, я просто использую 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.Что мне делать?

1 Ответ

4 голосов
/ 05 сентября 2010

Ответ на ваш вопрос заключается в использовании расширения (MapperExtension, SessionExtension ...), как описано здесь .

Но вы почти наверняка не хотите ничего делать, например, отправлять электронные письма с таким хуком. Правильный способ - записать действие и обработать запись журнала после завершения транзакции.

[РЕДАКТИРОВАТЬ] Документы sqlalchemy изменились; новый способ справиться с этим - использовать ORM Events

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...