SQLAlchemy ORM 操作与查询全解析
1. 会话中对象的更新
在会话(Session)中更新持久化(Persistent)或待处理(Pending)对象时,我们只需在内存中修改对象,会话会自动处理数据库中的变更。例如,若要对 SKU 为 “111” 的产品重新分类,可直接更新其类别列表:
p3.categories = [slacks, pants, bottoms]
session.flush()
SQLAlchemy 能推断出更新关系所需的最小变更,并且允许为 relation() 类型的属性分配普通 Python 列表。不过,使用动态关系加载器(通过 dynamic_loader() 或 lazy='dynamic' 声明)时,只能使用 remove() 和 append() 方法修改列表,因为 SQLAlchemy 不会隐式将所有相关对象加载到内存中,使用其他修改方法无法推断如何更新数据库。
2. 嵌入 SQL 表达式进行刷新
在对对象执行原子更新时,将 SQL 表达式(来自 SQL 表达式语言)分配给对象的映射属性非常有用。以银行应用为例,从账户余额中扣除一定金额时,先查询余额再更新的方式既不安全又低效,更好的做法是在一个 UPDATE 语句中原子性地扣除金额。示例代码如下:
fr
SQLAlchemy ORM核心操作详解
超级会员免费看
订阅专栏 解锁全文
5394

被折叠的 条评论
为什么被折叠?



