Каким образом реализуется наследование моделей при определении ORM-моделей в SQLAlchemy?
Answer from AI
sobes.tech AI
В SQLAlchemy наследование моделей реализуется с помощью обычного наследования классов Python, при этом можно использовать разные стратегии наследования для таблиц в базе данных:
-
Single Table Inheritance (STI) — все поля базового и дочерних классов хранятся в одной таблице, различие типов записей определяется специальным столбцом (discriminator).
-
Joined Table Inheritance — для каждого класса создаётся своя таблица, дочерняя таблица содержит только дополнительные поля и ссылается на базовую таблицу через внешний ключ.
-
Concrete Table Inheritance — каждый класс имеет свою таблицу со всеми полями, включая поля базового класса, без связей между таблицами.
Пример простого наследования с joined table inheritance:
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import declarative_base, relationship
Base = declarative_base()
class Person(Base):
__tablename__ = 'person'
id = Column(Integer, primary_key=True)
name = Column(String)
type = Column(String)
__mapper_args__ = {
'polymorphic_identity': 'person',
'polymorphic_on': type
}
class Employee(Person):
__tablename__ = 'employee'
id = Column(Integer, ForeignKey('person.id'), primary_key=True)
employee_number = Column(String)
__mapper_args__ = {
'polymorphic_identity': 'employee',
}
Таким образом, наследование моделей позволяет удобно организовать структуру данных и логику работы с ними в ORM.