我已经能够使用文档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的解决方案似乎可以使用两个选择。
答案 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