📅  最后修改于: 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