参数有序更新



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

广告