超超哥AI云计算超哥讲AI 出品

社群入口

AI 超哥 Codex 副业群

扫码加入群聊,一起交流 AI、Codex 与副业实践。

原图注明二维码于10月20日前有效;若提示过期或无法入群,请等待更新二维码。

AI 超哥 Codex 副业群入群二维码在新窗口打开原图

Session、对象状态与事务管理

MySQL、SQLAlchemy 与数据库设计#Python全栈#第十四阶段#MySQL、SQLAlchemy 与数据库设计#Session、对象状态与事务管理约 897 字 · 3 分钟阅读
追问显示
点击任意追问卡片可收起 / 展开

ORM 对象的 transient、pending、persistent 与 detached 状态分别是什么?

追问 构造、add、flush 与离开 Session 后怎样变化?对象存在于 Python 内存是否说明记录已持久化?

add、flush、commit、rollback 与 close 各做什么?

追问 flush 后能否取得生成的主键?为什么执行 INSERT 后仍可能回滚,close 又为什么不等于自动提交?

autoflush 与 autobegin 怎样影响看起来只是读取的代码?

追问 查询前为何可能先发出待处理写入?autobegin 与数据库 autocommit 为什么不是同一个概念?

Session 的 identity map 解决什么问题?

追问 同一 Session 按同一主键加载时,对象身份可能怎样复用?它为什么不是自动共享、自动更新的全局查询缓存?

expire、refresh 与提交后过期行为怎样影响属性访问?

追问 对象中的旧值何时可能重新读取?expire_on_commit 的选择如何影响同步、异步和响应序列化?

flush 发生约束错误后,Session 应如何继续或结束?

追问 数据库回滚与恢复 Session 的可用事务状态为何需要区分?捕获 IntegrityError 后为什么通常还应明确 rollback?

事务上下文管理器怎样帮助组织提交和回滚?

追问 Session 上下文与 Session.begin 上下文分别保证什么?怎样避免底层函数提前提交,破坏外层业务原子性?

Session.merge 的含义是什么?

追问 它怎样把来源状态复制到受管理对象,并返回什么?为何不应把它直接当作任意输入的安全 upsert 或权限检查?

为什么不应让多个并发线程或任务共用同一个 Session?

追问 Session 的事务和对象状态为什么具有可变性?“一个线程一个 Session”与“一个任务一个 AsyncSession”怎样落地?

对象脱离 Session 后访问关联属性,为何可能失败?

追问 预先加载、显式输出模型和保持会话打开各有什么取舍?为什么不能通过无限延长请求会话来掩盖接口边界问题?

核对资料: SQLAlchemy Session 基础。