Usando Múltiplas Atualizações de Tabela

No capítulo anterior, discutimos sobre como usar várias tabelas. Então, damos um passo adiante e aprendemosmultiple table updates neste capítulo.

Usando o objeto de tabela de SQLAlchemy, mais de uma tabela pode ser especificada na cláusula WHERE do método update (). O PostgreSQL e o Microsoft SQL Server oferecem suporte a instruções UPDATE que se referem a várias tabelas. Isso implementa“UPDATE FROM”sintaxe, que atualiza uma tabela por vez. No entanto, tabelas adicionais podem ser referenciadas em uma cláusula “FROM” adicional na cláusula WHERE diretamente. As linhas de códigos a seguir explicam o conceito demultiple table updates claramente.

stmt = students.update().\
values({
   students.c.name:'xyz',
   addresses.c.email_add:'[email protected]'
}).\
where(students.c.id == addresses.c.id)

O objeto de atualização é equivalente à seguinte consulta UPDATE -

UPDATE students 
SET email_add = :addresses_email_add, name = :name 
FROM addresses 
WHERE students.id = addresses.id

No que diz respeito ao dialeto do MySQL, várias tabelas podem ser incorporadas em uma única instrução UPDATE separada por uma vírgula, conforme mostrado abaixo -

stmt = students.update().\
   values(name = 'xyz').\
   where(students.c.id == addresses.c.id)

O código a seguir descreve a consulta UPDATE resultante -

'UPDATE students SET name = :name 
FROM addresses 
WHERE students.id = addresses.id'

O dialeto SQLite, entretanto, não oferece suporte a critérios de múltiplas tabelas em UPDATE e mostra o seguinte erro -

NotImplementedError: This backend does not support multiple-table criteria within UPDATE