简单的SQLAlchemy更新表基于另一个表中的值

时间:2017-01-18 10:56:24

标签: python mysql sqlalchemy

我是SQLAlchemy的新手,所以请原谅必须是一个基本问题。

我有一个数据库表properties(在SQLALchemy中映射为对象Property),其中包含一个字段MEBID。我有另一个表mebs(在SQLAlchemy中映射为MEB)。我想将properties.MEBID字段设置为mebs.id,其中properties.PostCode == mebs.PostCode。

我可以使用命令

在SQL中完成此操作
update properties, mebs set properties.mebid = mebs.id where mebs.PostCode = properties.PostCode

但我正在努力在SQLAlchemy中这样做。如果我尝试命令

session.query(Property, MEB).\
  filter(Property.PostCode == MEB.PostCode).\
  update({Property.MEBID : MEB.id})

我得到了

InvalidRequestError: This operation requires only one Table or entity be specified as the target.

我知道这必须是基本的,因为它是一个基本的操作,但不能解决它是如何完成的。

1 个答案:

答案 0 :(得分:1)

更新:

for prop, meb in session.query(Property, MEB).filter(Property.PostCode == MEB.PostCode).all():
    prop.MEBID=meb.id 
    session.add(prop)