Учебники

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

В предыдущей главе мы обсудили, как использовать несколько таблиц. Таким образом, мы продолжим шаг дальше и изучим множество обновлений таблиц в этой главе

Используя объект таблицы SQLAlchemy, в предложении WHERE метода update () можно указать более одной таблицы. PostgreSQL и Microsoft SQL Server поддерживают операторы UPDATE, которые ссылаются на несколько таблиц. Это реализует синтаксис «ОБНОВЛЕНИЕ ОТ» , который обновляет одну таблицу за раз. Однако на дополнительные таблицы можно ссылаться в дополнительном предложении «FROM» в предложении WHERE напрямую. Следующие строки кода четко объясняют концепцию обновлений нескольких таблиц .

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 и показывает следующую ошибку: