📜  使用多个表更新

📅  最后修改于: 2020-11-27 07:38:13             🧑  作者: Mango


在上一章中,我们讨论了如何使用多个表。因此,我们将更进一步,并在本章中学习多个表更新

使用SQLAlchemy的表对象,可以在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 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