SQLAlchemy相关更新多列

8

我已经能够使用文档中展示的相关更新结构(在这里)来更新表中的一个列。

例如:

sel = select([UpdateTable.column]).\
      where(UpdateTable.id == OrigTable.id)

up = update(OrigTable).values(column=sel) 

生成的 SQL 语句如下:

UPDATE origtable SET column=(SELECT updatetable.column
FROM updatetable
WHERE updatetable.id = origtable.id)

是否可以使用Declarative或Query Api来更新所选内容的多个列?

我正在尝试在PostgreSQL中模拟以下内容:

UPDATE origtable
   SET
     column1 = updatetable.column1,
     column2 = updatetable.column2
   FROM updatetable 
   WHERE origtable.id == updatetable.id

编辑:

使用当前的SQLAlchemy API似乎不可能将此格式化为单个语句。

但是,可以使用两个select语句的解决方法,使用这里的解决方案。


1
这个解决方案可能不是最优的,但对于你的需求来说已经足够接近了。链接 - lrnzcig
谢谢@lrnzcig,我想可能有类似的解决方案。 我猜当前的API不直接支持这个。 - amckinley
不客气。(如果有帮助的话,我建议给链接的解决方案点个赞。谢谢。) - lrnzcig
@lrnzcig。完成了,再次感谢。 - amckinley
https://dev59.com/O5_ha4cB1Zd3GeqP3brf - Matthew Moisen
1个回答

5

由于这是针对Postgresql的,我们可以使用SQLAlchemy的多表更新支持。文档仅适用于Core,但查询API建立在Core之上,我们可以应用这些知识

session.query(OrigTable).\
    filter(OrigTable.id == UpdateTable.id).\
    update({OrigTable.column1: UpdateTable.column1,
            OrigTable.column2: UpdateTable.column2},
           synchronize_session=False)

导致

UPDATE origtable
SET column1=updatetable.column1,
    column2=updatetable.column2
FROM updatetable
WHERE origtable.id = updatetable.id

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接