- SQLAlchemy 教程
- SQLAlchemy - 首頁
- SQLAlchemy - 簡介
- SQLAlchemy Core
- 表示式語言
- 連線資料庫
- 建立表
- 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)])
列表物件類似於字典,不同之處在於它是按順序排列的。這確保“y”列的SET子句將首先呈現,然後是“x”列的SET子句。
廣告