• sqlalchemy event监听


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

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

    监听 SQL 语句执行

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

    from sqlalchemy import create_engine, event
    from sqlalchemy.engine import Engine
    
    def 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 Session
    
    def 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 的官方文档中关于事件的章节。

  • 相关阅读:
    AIGC AI绘画 Midjourney 的详细使用手册
    源码(chan,map,GMP,mutex,context)
    Java中的String数据类型,String类(字符串)详解
    linux驱动之设备树语法(2)
    解析分布式数据库的技术框架及其在金融行业中的应用规划
    JSTL介绍
    Excel报表
    解读数据可用性赛道:如何讲好模块化区块链的叙事?
    【Android -- 数据存储】使用文件存储数据
    关于信息安全软考的记录3
  • 原文地址:https://blog.csdn.net/youhebuke225/article/details/139778138