Uso de actualizaciones de varias tablas

En el capítulo anterior, analizamos cómo utilizar varias tablas. Así que avanzamos un paso más y aprendemosmultiple table updates en este capítulo.

Usando el objeto de tabla de SQLAlchemy, se puede especificar más de una tabla en la cláusula WHERE del método update (). PostgreSQL y Microsoft SQL Server admiten declaraciones UPDATE que hacen referencia a varias tablas. Esto implementa“UPDATE FROM”sintaxis, que actualiza una tabla a la vez. Sin embargo, se puede hacer referencia a tablas adicionales en una cláusula adicional "FROM" en la cláusula WHERE directamente. Las siguientes líneas de códigos explican el concepto 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)

El objeto de actualización es equivalente a la siguiente consulta UPDATE:

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

En lo que respecta al dialecto de MySQL, se pueden incrustar varias tablas en una sola declaración UPDATE separadas por una coma como se indica a continuación:

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

El siguiente código muestra la consulta UPDATE resultante:

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

Sin embargo, el dialecto SQLite no admite criterios de tablas múltiples dentro de ACTUALIZAR y muestra el siguiente error:

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