📜  参数排序的更新

📅  最后修改于: 2020-11-27 07:38:43             🧑  作者: Mango


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