複数のテーブル更新の使用

前の章では、複数のテーブルの使用方法について説明しました。だから私たちはさらに一歩進んで学びます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