Hasty Briefsbeta

双语

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() 来高效地异步迭代大型结果集。