Sqlalchemy-core-using-multiple-table-updates
提供:Dev Guides
複数のテーブル更新の使用
前の章では、複数のテーブルの使用方法について説明しました。 したがって、この章ではさらに一歩進んで、*複数のテーブルの更新*を学びます。
SQLAlchemyのテーブルオブジェクトを使用すると、update()メソッドのWHERE句で複数のテーブルを指定できます。 PostgreSQLおよびMicrosoft SQL Serverは、複数のテーブルを参照するUPDATEステートメントをサポートしています。 これは、一度に1つのテーブルを更新する*“ UPDATE FROM” *構文を実装します。 ただし、追加のテーブルは、WHERE句の追加の「FROM」句で直接参照できます。 次のコード行は、*複数のテーブル更新*の概念を明確に説明しています。
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