引數有序更新



原始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子句。

廣告
© . All rights reserved.