Метод generate_base
Метод generate_base класса registry создает
базовый класс для декларативных моделей. Первым параметром
метод принимает имя будущего класса базы. Через именованные
параметры metadata и class_registry можно
передать собственный объект метаданных и словарь реестра классов.
Метод возвращает новый класс, от которого наследуются все
модели приложения.
Синтаксис
registry.generate_base([name], [metadata], [class_registry])
Пример
Давайте создадим реестр и сгенерируем декларативную базу
с именем Base:
from sqlalchemy.orm import registry
mapper_registry = registry()
Base = mapper_registry.generate_base()
print(Base)
Результат выполнения кода:
"<class 'sqlalchemy.orm.decl_api.Base'>"
Пример
Давайте определим модель Article на основе
сгенерированной базы:
from sqlalchemy.orm import registry, Mapped, mapped_column
mapper_registry = registry()
Base = mapper_registry.generate_base()
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
print(Article.__tablename__)
print(Article.__mapper__.primary_key)
Результат выполнения кода:
"articles"
"(Column('id', Integer(), table=<articles>, primary_key=True, nullable=False),)"
Пример
Давайте передадим собственный объект MetaData
через именованный параметр metadata:
from sqlalchemy import MetaData
from sqlalchemy.orm import registry, Mapped, mapped_column
my_metadata = MetaData()
mapper_registry = registry()
Base = mapper_registry.generate_base(metadata=my_metadata)
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
print(Base.metadata is my_metadata)
print(list(my_metadata.tables))
Результат выполнения кода:
True
['articles']
Смотрите также
-
класс
registry,
который хранит реестр декларативных моделей -
метод
configure,
который настраивает маппинг после объявления моделей -
метод
map_imperatively,
который связывает класс с таблицей императивно -
атрибут
metadata,
который хранит коллекцию таблиц реестра