Возвращение определенного типа для отношений при использовании наследования? - PullRequest
0 голосов
/ 27 декабря 2011

На данный момент у меня есть следующие таблицы:

|nodes| |types| |persons| |images|

Где |persons| и |images| равны |types|, а |nodes| имеет |types|.

Я пытаюсь представить схему базы данных, которую я имею до сих пор, используя декларативный синтаксис SQLAlchemy, чтобы я мог легко запрашивать базу данных из Python. Проблема, однако, заключается в том, что когда я запрашиваю node.types, я получаю общий класс Type вместо определенного Person (или любого другого) класса.

Вот что у меня есть:

class Node(Base):
    __tablename__ = 'nodes'
    __table_args__ = {'autoload': True}

    types = relationship("Type")

class Type(Base):
    __tablename__ = 'types'
    __table_args__ = {'autoload': True}

    node_id = Column("node_id", Integer, ForeignKey('nodes.id'))

class Person(Type):
    __tablename__ = "persons"
    __table_args__ = {'autoload': True}
    __mapper_args__ = {'polymorphic_identity': '/people/person'}

    id = Column("id", Integer, ForeignKey('types.id'), primary_key=True)

Пример:

session = Session()
print session.query(Node).one().types[0]
... <__main__.Type object at 0x9a4decc>

Как я могу легко получить определенный тип вместо универсального типа?

1 Ответ

1 голос
/ 27 декабря 2011

Nevermind. Я забыл добавить polymorphic_on в класс Type. То есть:

class Type(Base):
    __tablename__ = 'types'
    __table_args__ = {'autoload': True}

    type = Column("type", String)
    node_id = Column("node_id", Integer, ForeignKey('nodes.id'))

    __mapper_args__ = {'polymorphic_on': type}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...