如何拦截SQLAlchemy应用中的CRUD?

0 投票
1 回答
637 浏览
提问于 2025-04-17 07:49

我正在运行一个应用程序,这个程序使用sqlalchemy来访问数据库。现在我需要获取所有的插入、更新和删除操作。我在很多地方写了数据库操作,感觉修改这些代码会很危险。有没有办法让我只改sqlalchemy的代码,捕捉到所有的“插入、更新、删除”操作呢?

我试着找execute这个方法,但发现定义实在太多了:

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

请查看 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)

撰写回答