Sqlalchemy 简明教程

Using Multiple Table Updates

在上一章中,我们讨论了如何使用多张表。因此,我们在本章中进一步学习 multiple table updates

使用 SQLAlchemy 的表对象,可以在 update() 方法的 WHERE 子句中指定多个表。PostgreSQL 和 Microsoft SQL Server 支持引用多张表的 UPDATE 语句。这实现了 “UPDATE FROM” 语法,该语法一次更新一张表。但是,可以在 WHERE 子句的附加“FROM”子句中直接引用其他表。以下代码行清楚地解释了 multiple table updates 的概念。

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