Атрибут metadata класса registry
Атрибут metadata класса registry предоставляет
доступ к объекту MetaData, связанному с данным
реестром. Этот объект хранит коллекцию таблиц, их столбцов,
ограничений и других элементов схемы базы данных. При создании
класса через registry все декларативные модели
автоматически регистрируют свои таблицы в этом объекте
MetaData.
Атрибут metadata доступен только для чтения и
возвращает экземпляр MetaData. Его можно
использовать для создания таблиц в базе данных, получения
списка зарегистрированных таблиц и работы с объектами
Table напрямую.
Синтаксис
registry.metadata
Пример
Давайте создадим реестр и получим его объект
MetaData:
from sqlalchemy.orm import registry
reg = registry()
print(reg.metadata)
Результат выполнения кода:
"MetaData()"
Пример
Давайте определим модель через реестр и посмотрим, как
таблица попадает в объект metadata:
from sqlalchemy.orm import registry
reg = registry()
@reg.mapped_as_dataclass
class Article:
__tablename__ = 'articles'
id: int
title: str
text: str
status: str
num: int
print(reg.metadata.tables.keys())
Результат выполнения кода:
"dict_keys(['articles'])"
Пример
Давайте используем объект metadata для создания
таблиц в базе данных:
from sqlalchemy import create_engine
from sqlalchemy.orm import registry
reg = registry()
@reg.mapped_as_dataclass
class Article:
__tablename__ = 'articles'
id: int
title: str
text: str
status: str
num: int
engine = create_engine('sqlite:///:memory:')
reg.metadata.create_all(engine)
print(reg.metadata.tables.keys())
Результат выполнения кода:
"dict_keys(['articles'])"
Пример
Давайте получим объект Table из
metadata и выведем список его столбцов:
from sqlalchemy.orm import registry
reg = registry()
@reg.mapped_as_dataclass
class Article:
__tablename__ = 'articles'
id: int
title: str
text: str
status: str
num: int
table = reg.metadata.tables['articles']
print([column.name for column in table.columns])
Результат выполнения кода:
['id', 'title', 'text', 'status', 'num']
Смотрите также
-
класс
registry,
который создает реестр моделей -
метод
generate_base,
который создает декларативный базовый класс -
метод
map_imperatively,
который связывает класс с таблицей вручную -
атрибут
mappers,
который содержит коллекцию мапперов