使用多表更新



在上一章中,我們已經討論瞭如何使用多張表。所以,我們在本章中繼續向前邁進一步,學習多表更新

使用 SQLAlchemy 的 table 物件,可以在 update() 方法的 WHERE 子句中指定多張表。PostgreSQL 和 Microsoft SQL Server 支援引用多張表的 UPDATE 語句。這實現了 “UPDATE FROM” 語法,它一次更新一張表。但是,其他表可以直接在 WHERE 子句的附加 “FROM” 子句中引用。下面的程式碼行清楚地解釋了 多表更新 的概念。

stmt = students.update().\
values({
   students.c.name:'xyz',
   addresses.c.email_add:'abc@xyz.com'
}).\
where(students.c.id == addresses.c.id)

update 物件等效於以下 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
廣告
© . All rights reserved.