我可以覆盖派生类中的sqlalchemy关系以返回派生类的对象吗?

时间:2019-08-06 04:32:41

标签: python sqlalchemy flask-sqlalchemy

我在SQLAlchemy中有两个基类(以声明方式定义),它们之间具有关系。然后,我将这些基类的每个子类化。当我访问第一个派生类中的关系时,我想“覆盖”类之间的关系以返回第二个派生类的对象。

我已经研究了有关继承的sqlalchemy文档,但是找不到对“覆盖”关系的引用。

class BaseA(db.Model):
    type_class = db.Column(db.String)
    __mapper_args__ = {
        'polymorphic_identity':'base',
        'polymorphic_on':type_class
    }
    id =    db.Column(db.Integer, primary_key=True)
    name =  db.Column(db.String)
    B_id =  db.Column(db.Integer, db.ForeignKey('BaseB.id'))
    B =     db.relationship('BaseB', uselist=False, foreign_keys='B_id')


class DerivedA(BaseA):
    __mapper_args__ = {
        'polymorphic_identity':'derived',
    }
    extra =  db.Column(db.String)


class BaseB(db.Model):
    type_class = db.Column(db.String)
    __mapper_args__ = {
        'polymorphic_identity':'base',
        'polymorphic_on':type_class
    }
    id =   db.Column(db.Integer, primary_key=True)
    location = db.Column(db.String)


class DerivedB(BaseB):

    # Polymorphic mapping support
    __mapper_args__ = {
        'polymorphic_identity':'derived',
    }
    data = db.Column(db.String)


a = DerivedA()
b = DerivedB()
a.B = b

当我以后尝试从对象a检索B时,我希望得到一个类DerivedB的对象。但是,不仅我没有得到DerivedB类型的对象,而且该代码似乎根本不起作用。我收到一条错误消息:“未定义您未派生的polymorphic_identity。可以做我想做的事情,如果可以,怎么做?

0 个答案:

没有答案