Sqlalchemy: использование дискриминантного столбца в другой таблице - PullRequest
0 голосов
/ 10 января 2020

У меня есть небольшая проблема, которую я не могу решить с помощью sqlalchemy. Я использую «Объединенное наследование таблиц», как указано в документации https://docs.sqlalchemy.org/en/13/orm/inheritance.html со столбцом дискриминатора. Это работает хорошо, однако я хочу отделить столбец дискриминанта в другой таблице.

Например, я sh должен иметь что-то подобное:

class EmployeeType(Base):
    __tablename__ = 'employee_type'
    id = Column(Integer, primary_key=True)
    employee_type_name = Column(String(50))

class Employee(Base):
    __tablename__ = 'employee'
    id = Column(Integer, primary_key=True)
    employee_type_id = Column(Integer(), ForeignKey('employee_type.id'), nullable=False)

    employee_type = relashionship('EmployeeType')

    __mapper_args__ = {
        'polymorphic_identity': select([EmployeeType.id]).where(EmployeeType.employee_type_name=='Employee'),
        'polymorphic_on': employee_type_id
    }

class Manager(Employee):
    __tablename__ = 'manager'
    id = Column(Integer, ForeignKey('employee.id'), primary_key=True)
    manager_name = Column(String(30))

    __mapper_args__ = {
        'polymorphic_identity': select([EmployeeType.id]).where(EmployeeType.employee_type_name=='Manager')
    }

с двумя строками в таблице EmployeeType вот так:

EmployeeType(id, employee_type_name) = (1, 'Employee')
EmployeeType(id, employee_type_name) = (2, 'Manager')

В этом примере, когда Я объявляю новый объект Manager в базе данных, которую я ожидал:

Manager(id,manager_name) = (1, 'John')
Employee(id, employee_type_id) = (1, 2)

Однако, когда мне нужно получить доступ к объекту Manager, я получаю эту ошибку:

AssertionError: No such polymorphic_identity 2 is defined

Есть ли способ указать, какое целое число резервировать в столбце employee_type_id таблицы Employee, не зная заранее правильного первичного ключа для имени типа сотрудника Manager? Например, не указывайте номер первичного ключа в поле polymorphic_identity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...