Атрибут mappers класса registry
Атрибут mappers класса registry возвращает
специальную коллекцию, содержащую все мапперы,
которые были зарегистрированы в данном реестре.
Каждый маппер связывает класс модели с таблицей
базы данных. Коллекция ведет себя подобно словарю:
ключом выступает класс модели, а значением -
объект Mapper. Атрибут доступен только для
чтения и обновляется автоматически при регистрации
новых классов через registry.map_imperatively
или через декларативную базу, созданную методом
generate_base.
Синтаксис
registry.mappers
Пример
Давайте создадим реестр и зарегистрируем в нем
класс модели с помощью метода
map_imperatively, а затем посмотрим на
содержимое атрибута mappers:
from sqlalchemy import Column, Integer, String, Table, MetaData
from sqlalchemy.orm import registry
reg = registry()
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
)
class Article:
pass
reg.map_imperatively(Article, articles)
print(reg.mappers)
Результат выполнения кода:
"{Article: <Mapper at 0x...; Article>>}"
Пример
Давайте переберем все зарегистрированные мапперы и выведем для каждого имя класса и имя таблицы:
from sqlalchemy import Column, Integer, String, Table, MetaData
from sqlalchemy.orm import registry
reg = registry()
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
)
users = Table(
'users',
metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
)
class Article:
pass
class User:
pass
reg.map_imperatively(Article, articles)
reg.map_imperatively(User, users)
for cls, mapper in reg.mappers.items():
print(cls.__name__, '->', mapper.local_table.name)
Результат выполнения кода:
Article -> articles
User -> users
Пример
Давайте получим маппер конкретного класса из
коллекции mappers и выведем его первичный
ключ:
from sqlalchemy import Column, Integer, String, Table, MetaData
from sqlalchemy.orm import registry
reg = registry()
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
)
class Article:
pass
reg.map_imperatively(Article, articles)
mapper = reg.mappers[Article]
print([column.name for column in mapper.primary_key])
Результат выполнения кода:
['id']
Смотрите также
-
класс
registry,
который хранит коллекцию мапперов -
метод
map_imperatively,
который регистрирует маппер в реестре -
метод
generate_base,
который создает декларативную базу для реестра -
атрибут
metadata,
который хранит объект MetaData реестра