Использование нескольких обновлений таблиц

В предыдущей главе мы обсудили, как использовать несколько таблиц. Итак, мы продвигаемся дальше и узнаем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