#SQLAlchemy
共 12 篇文章
SQLAlchemy 捕获 IntegrityError 后仍报会话已回滚:把 flush 和 rollback 放对位置
SQLAlchemy 捕获 IntegrityError 后继续查询仍失败时,先确认错误是否发生在 flush,并对同一 Session 显式 rollback,再开始后续事务。
SQLAlchemy 设置 expire_on_commit=False 仍报 DetachedInstanceError:会话已关闭
SQLAlchemy 返回 ORM 对象后读取属性报错时,核对 sessionmaker 会话范围、已加载数据与序列化边界;关闭会话不受 expire_on_commit=False 阻止。
asyncpg 在线改表后报 InvalidCachedStatementError:旧缓存遇到新结构
在线修改 PostgreSQL 结构后,旧连接的查询计划或类型缓存可能失效。区分事务内外处理、直接 asyncpg 与 SQLAlchemy 的缓存参数,并安排迁移和连接生命周期。
pandas 1.5 升级 SQLAlchemy 2 后读库报 ObjectNotExecutableError
pandas 1.5 与 SQLAlchemy 2 组合读取数据库报不可执行对象,核对堆栈,用 Connection 和 text 参数绑定修复,并区分当前版本支持情况。
SQLAlchemy 修改 JSON 字典后 commit 没有保存
普通 JSON 映射不自动检测字典原地修改。为顶层变化配置 MutableDict,或修改独立副本后整体赋回,并用新会话检查实际落库结果。
SQLAlchemy 更新 JSONB 后未传字段丢失:UPDATE 不会自动深度合并
局部请求被当成整个 JSONB 值保存时,区分整列替换、路径更新与浅层连接,并为应用读改写保留行锁或版本冲突处理。
SQLAlchemy count 返回 100,all 却只有一个实体
区分关联后的 SQL 行与 Query 按身份去重的实体,将父主键去重放在分页之前,并保留现代 Result 接口和复合主键边界。
SQLAlchemy 内存 SQLite 已建表,请求却报 no such table:连接没有共享
内存 SQLite 已建表但 FastAPI TestClient 请求仍报 no such table 时,检查线程与连接范围;区分串行 StaticPool 和并发共享内存 URI,保留事务与数据生命周期限制。
SQLAlchemy 已加 selectinload 仍报 MissingGreenlet:get 可能复用旧对象
AsyncSession 的 get 命中已有对象时可能不执行加载查询,核对 identity map,按业务选择 populate_existing 或显式关系加载,保留未提交状态与版本边界。
SQLAlchemy 执行 VACUUM 报事务错误:先检查自定义 BEGIN 钩子
SQLite VACUUM 仍报事务错误时,核对自定义 BEGIN 钩子、驱动自动提交与维护连接的边界,避免裸 COMMIT 提前提交业务数据。


