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