SQLAlchemy教程:创建session 作者:马育民 • 2026-08-17 14:13 • 阅读:10002 # 介绍 `Session` 会话:ORM的核心工作单元,充当程序和数据库的桥梁。所有对象的 **新增、修改、删除** 先提交到 `session`,最后统一提交事务到数据库,支持回滚。 创建 `session` 有两种方式: - 直接创建 - 使用工厂写法 # 方式1:直接创建(不推荐) ``` async def save(user: User): # AsyncSession 使用上下文管理器,自动关闭会话 async with AsyncSession(async_engine,expire_on_commit = False) as session: try: session.add(user) # 成功执行才提交事务 await session.commit() except Exception as e: # 如果报错就回滚 await session.rollback() raise e ``` ### 缺点 需要在 `with` 语句里设置参数,如下: ``` with AsyncSession(async_engine,expire_on_commit = False) ``` 在有多个函数中需要对数据库进行增删改查操作,就都需要设置参数,不统一 **提示:** 关于 `expire_on_commit` 参数详见 [链接](https://www.malaoshi.top/show_1GW3sWwNvAuY.html "链接") # 实现方式2:工厂方法(推荐) 在 **工厂方法** 中统一设置参数,之后通过该工厂方法创建 `session`: ### 工厂方法 ``` """ 创建异步会话工厂,通过该会话工厂,创建session 好处:参数统一在这里配置,如:expire_on_commit """ async_session = async_sessionmaker( async_engine, # 绑定数据库引擎 class_=AsyncSession, # 指定会话类,调用 async_session() 返回的类型 expire_on_commit=False # commit后,会话中的模型对象不过期,访问对象的属性,不需重新查询数据库 ) ``` **提示:** 关于 `expire_on_commit` 参数详见 [链接](https://www.malaoshi.top/show_1GW3sWwNvAuY.html "链接") ### 执行增删改查函数 只需要调用 `async_session()` 创建 `session` 即可,不用设置参数: ``` async def save(user: User): # AsyncSession 使用上下文管理器,自动关闭会话 async with async_session() as session: try: session.add(user) # 成功执行才提交事务 await session.commit() except Exception as e: # 如果报错就回滚 await session.rollback() raise e ``` 原文出处:/show_1GW3sWxzckRm.html