当前位置: 首页> 健康> 科研 > sqlalchemy event监听

sqlalchemy event监听

时间:2025/7/17 13:31:39来源:https://blog.csdn.net/youhebuke225/article/details/139778138 浏览次数:0次

在 SQLAlchemy 中,event 系统允许你监听数据库引擎、会话、映射类等对象上的事件,并在这些事件发生时执行自定义的代码。这对于在 SQL 语句执行前后、对象加载、对象刷新等时刻执行特定的逻辑非常有用。

要使用 SQLAlchemy 的 event 系统,你需要首先导入相关的模块,并使用 event.listen() 函数来监听事件。以下是一些常见的用法示例:

监听 SQL 语句执行

你可以监听 SQL 语句的执行,以在它们被发送到数据库之前或之后执行某些操作。

from sqlalchemy import create_engine, event
from sqlalchemy.engine import Enginedef before_execute(conn, clauseelement, multiparams, params):print("Executing:", clauseelement)engine = create_engine('sqlite:///example.db')
event.listen(Engine, "before_execute", before_execute)# 接下来使用 engine 进行数据库操作,会触发 before_execute 函数

监听对象加载

你可以监听对象的加载事件,以在对象从数据库中加载时执行某些操作。

from sqlalchemy import event
from sqlalchemy.orm import mapper
from your_models import YourModel  # 假设你有一个名为 YourModel 的模型def after_load(mapper, context):instance = context.current_objects[0]# 在这里对 instance 进行操作print(f"Loaded {instance}")event.listen(YourModel, 'load', after_load)# 接下来使用 session 加载 YourModel 的实例,会触发 after_load 函数

监听对象刷新

你可以监听对象的刷新事件,以在对象的状态与数据库同步之前或之后执行某些操作。

from sqlalchemy import event
from sqlalchemy.orm import mapper
from your_models import YourModel  # 假设你有一个名为 YourModel 的模型def before_refresh(mapper, connection, target):# 在这里对 target 进行操作print(f"Refreshing {target}")event.listen(YourModel, 'before_refresh', before_refresh)# 接下来使用 session.refresh() 刷新 YourModel 的实例,会触发 before_refresh 函数

监听会话事件

你还可以监听会话级别的事件,如事务的开始、提交或回滚。

from sqlalchemy import create_engine, event
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm.session import Sessiondef after_commit(session):print("Transaction committed")def after_rollback(session):print("Transaction rolled back")engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)event.listen(Session, 'after_commit', after_commit)
event.listen(Session, 'after_rollback', after_rollback)# 接下来使用 Session 进行数据库操作并提交或回滚事务,会触发相应的事件处理函数

请注意,在使用 event.listen() 时,你需要确保你的事件监听器在对象被使用之前被注册。通常,你应该在模块级别或应用启动时注册这些监听器。

此外,SQLAlchemy 的 event 系统还提供了许多其他类型的事件,你可以根据需要进行探索和使用。有关更多详细信息,请参阅 SQLAlchemy 的官方文档中关于事件的章节。

关键字:sqlalchemy event监听

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: