Использование нескольких обновлений таблиц
В предыдущей главе мы обсудили, как использовать несколько таблиц. Итак, мы продвигаемся дальше и узнаемmultiple table updates в этой главе.
Используя объект таблицы SQLAlchemy, в предложении WHERE метода update () можно указать несколько таблиц. PostgreSQL и Microsoft SQL Server поддерживают операторы UPDATE, которые относятся к нескольким таблицам. Это реализует“UPDATE FROM”синтаксис, который обновляет одну таблицу за раз. Однако на дополнительные таблицы можно напрямую ссылаться в дополнительном предложении «FROM» в предложении WHERE. Следующие строки кода объясняют концепциюmultiple table updates ясно.
stmt = students.update().\
values({
students.c.name:'xyz',
addresses.c.email_add:'[email protected]'
}).\
where(students.c.id == addresses.c.id)
Объект обновления эквивалентен следующему запросу UPDATE -
UPDATE students
SET email_add = :addresses_email_add, name = :name
FROM addresses
WHERE students.id = addresses.id
Что касается диалекта MySQL, несколько таблиц могут быть встроены в один оператор UPDATE, разделенный запятой, как указано ниже:
stmt = students.update().\
values(name = 'xyz').\
where(students.c.id == addresses.c.id)
Следующий код изображает результирующий запрос UPDATE -
'UPDATE students SET name = :name
FROM addresses
WHERE students.id = addresses.id'
Однако диалект SQLite не поддерживает критерии с несколькими таблицами в UPDATE и показывает следующую ошибку:
NotImplementedError: This backend does not support multiple-table criteria within UPDATE