как перехватить CRUD в приложении на основе sqlalchemy? - PullRequest
0 голосов
/ 06 декабря 2011

Я запускаю приложение, которое использует sqlalchemy для доступа к слою БД. теперь мне нужно получить всю операцию вставки, обновления, удаления, я написал операцию db в двух разных местах и, кажется, будет очень рискованно менять этот код. В любом случае, можно ли изменить код sqlalchemy и перехватить все операции «вставка, обновление, удаление»?

Я пытался найти выполнение, но было слишком много определений:

lib/python2.6/site-packages/SQLAlchemy-0.5.3-py2.6.egg/sqlalchemy/engine/base.py
463:    def execute(self, *multiparams, **params):
500:    def execute(self, object, *multiparams, **params):
819:    def execute(self, object, *multiparams, **params):
1200:    def execute(self, statement, *multiparams, **params):
1280:        def execute(self, object, *multiparams, **params):
1808:    def execute(self):
1855:    def execute_string(self, stmt, params=None):

1 Ответ

1 голос
/ 06 декабря 2011

См. before_execute и другие события, задокументированные в События подключения .Образец из документации дословно:

from sqlalchemy import event, create_engine

def before_execute(conn, clauseelement, multiparams, params):
    log.info("Received statement: %s" % clauseelement)

engine = create_engine('postgresql://scott:tiger@localhost/test')
event.listen(engine, "before_execute", before_execute)
...