- SQLAlchemy 教程
- SQLAlchemy - 主页
- SQLAlchemy - 简介
- SQLAlchemy 核心
- 表达语言
- 连接到数据库
- 创建表
- SQL 表达式
- 执行表达式
- 选择行
- 使用文本 SQL
- 使用别名
- 使用 UPDATE 表达式
- 使用 DELETE 表达式
- 使用多个表
- 使用多个表更新
- 按参数顺序更新
- 多表删除
- 使用连接
- 使用连词
- 使用函数
- 使用集合运算
- SQLAlchemy ORM
- 声明映射
- 创建会话
- 添加对象
- 使用查询
- 更新对象
- 应用过滤器
- 过滤器运算符
- 返回列表和标量
- 文本SQL
- 建立关系
- 使用相关对象
- 使用连接
- 常见关系运算符
- 急切加载
- 删除相关对象
- 多对多关系
- 方言
- SQLAlchemy 有用资源
- SQLAlchemy - 快速指南
- SQLAlchemy - 有用的资源
- SQLAlchemy - 讨论
按参数顺序更新
原始 SQL 的 UPDATE 查询有 SET 子句。它由 update() 构造使用原始 Table 对象中给定的列顺序呈现。因此,具有特定列的特定 UPDATE 语句每次都会呈现相同的效果。由于参数本身作为 Python 字典键传递给 Update.values() 方法,因此没有其他可用的固定顺序。
在某些情况下,SET 子句中呈现的参数顺序很重要。在 MySQL 中,对列值的更新是基于其他列值的更新。
以下语句的结果 -
UPDATE table1 SET x = y + 10, y = 20
会有不同的结果 -
UPDATE table1 SET y = 20, x = y + 10
MySQL 中的 SET 子句是按值而不是按行进行评估的。为此,使用了preserve_parameter_order 。Python 2 元组列表作为Update.values()方法的参数给出-
stmt = table1.update(preserve_parameter_order = True).\ values([(table1.c.y, 20), (table1.c.x, table1.c.y + 10)])
List 对象与字典类似,只是它是有序的。这确保“y”列的 SET 子句将首先呈现,然后是“x”列的 SET 子句。