РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
190 of 711 menu

Метод 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 и выполним запрос к базе данных:

<+python+> from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, select 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('num', Integer), ) class Article: pass mapper_registry.map_imperatively(Article, articles) metadata.create_all(engine) with Session(engine) as session: session.add(Article()) session.commit() stmt = select(Article).where(Article.id == 1) res = session.execute(stmt).scalar_one() print(res.id) <-python+>

Результат выполнения кода:

"1"

Смотрите также

  • класс registry,
    который хранит коллекцию отображений
  • метод configure,
    который выполняет отложенную настройку мапперов
  • метод generate_base,
    который создает декларативный базовый класс
  • атрибут metadata,
    который хранит объект MetaData реестра
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить