SQLAlchemy 2 In Practice - Chapter 7: Asynchronous SQLAlchemy
a day ago
- SQLAlchemy 1.4+ 通过 asyncio 支持 Core 和 ORM 的异步编程,需要兼容异步的数据库驱动程序(例如 aiosqlite、aiomysql、asyncpg)。
- 异步代码必须避免隐式懒加载;关系应使用急加载器(如 'joined' 或 'selectin')或显式加载器(如 'write_only')以防止函数着色问题。
- 会话和引擎被替换为异步的等价物(create_async_engine、async_sessionmaker),并禁用 'expire_on_commit' 以避免隐式数据库刷新。
- Alembic 迁移需要异步模板('-t async')并配置批处理模式以确保兼容性。
- 会话刷新后,未初始化的列表式关系可能触发懒加载;解决方案包括显式初始化关系或使用 WriteOnlyMapped 加载器。
- 查询执行方法(session.execute、session.scalar 等)必须等待,并且推荐使用 stream()/stream_scalars() 来高效地异步迭代大型结果集。