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