使用多表更新



在上一章中,我们已经讨论了如何使用多张表。所以,我们在本章中继续向前迈进一步,学习多表更新

使用 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:'[email protected]'
}).\
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
广告