Как получить доступ к представлениям, определенным в postgresql, используя sqlalchemy ORM - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь прочитать представление , определенное в Postgresql как ' проекты ', которое объединяет две таблицы: ' entity_registry ' и 'проект ».Я определил класс 'Project' в Python, сопоставленный с этим представлением с помощью SQLM-конструкций sqlalchemy.Представление postgresql хорошо сформировано, о чем свидетельствует тот факт, что его можно без проблем извлечь из таких инструментов, как Navicat и PyCharm.Тем не менее, попытки выполнить мой код не удается с ошибкой:

sqlalchemy.exc.NoForeignKeysError: Не удается найти какие-либо отношения внешнего ключа между 'entity_registry'and' projects '.

Чего мне не хватает?Конечно, отношение внешнего ключа между этими двумя таблицами устанавливается в конструкции представления в postgresql и не должно раскрываться в sqlalchemy.

Большая часть документации, которую я нашел, относится к связыванию двух таблиц в Python / sqlalchemy.Мне не удалось найти примеры, когда представление определено в postgresql (или другой СУБД) и затем получило доступ, как если бы оно было обычной таблицей.

Вот SQL в postgresql, определяющий представление:

Select

entity_registry.name,
entity_registry.description,
entity_registry.state,
entity_registry.id,
entity_registry.status,
entity_registry.parent_id,
entity_registry.created_at,
entity_registry.created_by,
entity_registry.category,

project.budget,
project.planned_start,
project.planned_finish,
project.actual_start,
project.actual_finish,

FROM (itg.project
 JOIN vp.entity_registry ON ((project.project_id = entity_registry.id)))

... и вот модель, определенная в моем коде Python:

class Project(Entity):

    __tablename__ = 'projects'  # Name of the View in postgresql
    __table_args__ = {'schema': 'itg'}

    # These fields are from the 'entity_registry' postgresql table
    project_id = Column('id', Integer(), primary_key=True)
    name = Column(String(), nullable=False)
    description = Column(String(), nullable=False)
    category = Column(String(), nullable=True)
    state = Column('state', String(6), nullable=True)
    status = Column('status', String(6), nullable=True)

    # These fields are from the 'project' postgresql table
    budget = Column(Float(), nullable=True)
    planned_start = Column(DateTime(), nullable=True)
    planned_finish = Column(DateTime(), nullable=True)
    actual_start = Column(DateTime(), nullable=True)
    actual_finish = Column(DateTime(), nullable=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...