SQLAlchemy关联多列

时间:2015-09-08 19:54:40

标签: python postgresql sqlalchemy

我已经能够使用文档here中显示的相关更新构造来更新表格中的一列。

例如:

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)

是否可以使用Declaritive或Query Api为选择更新多个列?

我试图模仿PostgreSQL中的以下内容:

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

编辑:

使用当前的SQLAlchemy api似乎无法将此单个语句格式化。

但是,使用here的解决方案似乎可以使用两个选择。

1 个答案:

答案 0 :(得分:4)

由于这是针对Postgresql的,我们可以使用SQLAlchemy的multiple table update支持。该文档仅适用于Core,但Query API是在Core上构建的,我们可以apply that knowledge

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