Atualizações ordenadas por parâmetros

A consulta UPDATE do SQL bruto possui uma cláusula SET. Ele é renderizado pela construção update () usando a ordem das colunas fornecida no objeto Table de origem. Portanto, uma instrução UPDATE específica com colunas específicas será processada da mesma forma todas as vezes. Como os próprios parâmetros são passados ​​para o método Update.values ​​() como chaves de dicionário Python, não há outra ordem fixa disponível.

Em alguns casos, a ordem dos parâmetros processados ​​na cláusula SET é significativa. No MySQL, fornecer atualizações para valores de coluna é baseado em outros valores de coluna.

Resultado da declaração seguinte -

UPDATE table1 SET x = y + 10, y = 20

terá um resultado diferente de -

UPDATE table1 SET y = 20, x = y + 10

A cláusula SET no MySQL é avaliada por valor e não por linha. Para este efeito, opreserve_parameter_orderé usado. A lista Python de 2 tuplas é dada como argumento para oUpdate.values() método -

stmt = table1.update(preserve_parameter_order = True).\
   values([(table1.c.y, 20), (table1.c.x, table1.c.y + 10)])

O objeto List é semelhante ao dicionário, exceto pelo fato de ser ordenado. Isso garante que a cláusula SET da coluna “y” será renderizada primeiro e, em seguida, a cláusula SET da coluna “x”.