Метод map_imperatively класса registry
Метод map_imperatively класса registry выполняет
императивное отображение обычного Python-класса на таблицу
базы данных. Первым параметром метод принимает класс, который
нужно отобразить. Вторым параметром передается объект таблицы
Table или словарь свойств отображения. Дополнительные
именованные аргументы позволяют задать связи, полиморфизм и
другие настройки маппинга.
Синтаксис
registry.map_imperatively(class_, local_table, [properties], [**kw])
Пример
Давайте создадим таблицу и отобразим на нее обычный
Python-класс с помощью метода map_imperatively:
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
from sqlalchemy.orm import registry
engine = create_engine('sqlite:///:memory:')
mapper_registry = registry()
metadata = mapper_registry.metadata
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
)
class Article:
def __init__(self, title, text):
self.title = title
self.text = text
mapper_registry.map_imperatively(Article, articles)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert().values(title='article', text='some text'))
conn.commit()
from sqlalchemy.orm import Session
with Session(engine) as session:
res = session.query(Article).all()
print(res[0].title)
Результат выполнения кода:
"article"
Пример
Давайте передадим словарь свойств отображения вторым позиционным аргументом, чтобы явно указать колонки:
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
from sqlalchemy.orm import registry, Session
engine = create_engine('sqlite:///:memory:')
mapper_registry = registry()
metadata = mapper_registry.metadata
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('status', String),
)
class Article:
pass
mapper_registry.map_imperatively(
Article,
articles,
properties={
'id': articles.c.id,
'title': articles.c.title,
'status': articles.c.status,
},
)
metadata.create_all(engine)
with Session(engine) as session:
article = Article()
article.title = 'article'
article.status = 'published'
session.add(article)
session.commit()
print(article.id)
Результат выполнения кода:
"1"
Пример
Давайте отобразим класс на таблицу с помощью
map_imperatively и выполним запрос к базе данных:
Результат выполнения кода:
"1"
Смотрите также
-
класс
registry,
который хранит коллекцию отображений -
метод
configure,
который выполняет отложенную настройку мапперов -
метод
generate_base,
который создает декларативный базовый класс -
атрибут
metadata,
который хранит объект MetaData реестра