У меня есть небольшая проблема, которую я не могу решить с помощью 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.