抽象表具体继承。无法确定父/子表之间的连接条件

时间:2017-05-15 06:37:21

标签: sqlalchemy

我有以下示例代码:

models.py

origin/master

此代码按预期工作:

main.py

master

结果:

class CadastralObject(Base):
    __tablename__ = 'cadastral_object'
    def __init__(self, cadastral_region, cadastral_district, cadastral_block, cadastral_object):
        self.cadastral_region = cadastral_region
        self.cadastral_district = cadastral_district
        self.cadastral_block = cadastral_block
        self.cadastral_object = cadastral_object

    # this is a combined PK
    cadastral_region = Column(Integer, primary_key=True, index=True)
    cadastral_district = Column(Integer, primary_key=True, index=True)
    cadastral_block = Column(Integer, primary_key=True, index=True)
    cadastral_object = Column(Integer, primary_key=True, index=True)

    encumbrances = relationship("Encumbrance")

class Encumbrance(Base):
    __tablename__ = 'encumbrance'
    id = Column(Integer, primary_key=True, index=True)
    def __init__(self, cadastral_object):
        self.parent_cadastral_region = cadastral_object.cadastral_region
        self.parent_cadastral_district = cadastral_object.cadastral_district
        self.parent_cadastral_block = cadastral_object.cadastral_block
        self.parent_cadastral_object = cadastral_object.cadastral_object

    # FK fields
    parent_cadastral_region = Column(Integer, nullable=False)
    parent_cadastral_district = Column(Integer, nullable=False)
    parent_cadastral_block = Column(Integer, nullable=False)
    parent_cadastral_object = Column(Integer, nullable=False)

    parent_object = relationship(CadastralObject)
    __table_args__ = (ForeignKeyConstraint(
        [
            parent_cadastral_region,
            parent_cadastral_district,
            parent_cadastral_block,
            parent_cadastral_object],
        [
            CadastralObject.cadastral_region,
            CadastralObject.cadastral_district,
            CadastralObject.cadastral_block,
            CadastralObject.cadastral_object]),
                      {}
    )

然而,当我尝试将我的代码转换为Concrete Inheritance时:

imodels.py

c = CadastralObject(1, 2, 3, 4)
session.add(c)
e = Encumbrance(c)
session.add(e)
session.commit()
print(c.encumbrances)
print(e.parent_object)

我在“来自app.imodels导入大楼”中收到错误

[<app.models.Encumbrance object at 0x000001C9B820BCC0>]
<app.models.CadastralObject object at 0x000001C9B820BB00>

0 个答案:

没有答案