首页 > 解决方案 > Sqlalchemy:如何更新连接表继承中的父记录

问题描述

我正在尝试更新连接表继承中的记录,但收到一条错误消息,指出该列不存在(因为它在技术上位于父表中)。这是使用 Flask-Sqlalchemy / Postgres。

模型 (连接表继承):

class Job:
    __tablename__ = "job"
    
    id = db.Column(db.Integer, primary_key=True, nullable=False)
    currency = db.Column(db.Float)
    type = db.Column(db.String(100))

    __mapper_args__ = {
        "polymorphic_identity": "type",
        "polymorphic_on": type,
    }

    ...


class Plumber(Career):
    __tablename__ = "plumber"

    glue_type = db.Column(db.String(100))

    __mapper_args__ = {
        "polymorphic_identity": "plumber",
    }
    ...

询问:

Plumber.query.filter_by({"currency":"USD"}).update({"currency":"Euro", "glue_type":"acrylic"))
db.session.commit()

错误

(psycopg2.errors.UndefinedColumn) column "currency" of relation "plumber" does not exist

问题

plumber是否可以使用在表中找到的数据和job一个查询中的表来更新 Plumber 表?我该怎么做?

标签: pythondatabasesqlalchemyflask-sqlalchemy

解决方案


update_data = {"currency":"Euro", "glue_type":"acrylic")

inst = Plumber.query.filter_by({"currency":"USD"}).first()

for col, val in update_data.items():
  setattr(inst, col, val)

db.session.commit()


推荐阅读