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