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

Функция mapped

Функция mapped используется в декларативных моделях для аннотирования атрибутов, которые становятся колонками таблицы. Она принимает тип Python и возвращает объект Mapped, который указывает SQLAlchemy на необходимость создания колонки. Обычно применяется вместе с mapped_column для настройки параметров колонки: первичного ключа, значения по умолчанию, внешних ключей и других опций.

Синтаксис

mapped(тип)

Пример

Давайте создадим модель Article с аннотированными колонками через mapped:

from sqlalchemy import create_engine from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] text: Mapped[str] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) print(Article.__table__)

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

"Table('articles', MetaData(), Column('id', Integer(), table=<articles>, primary_key=True, nullable=False), Column('title', String(), table=<articles>, nullable=False), Column('text', String(), table=<articles>, nullable=False), schema=None)"

Пример

Давайте добавим колонку со значением по умолчанию и опциональным полем через mapped_column:

from sqlalchemy import create_engine from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] status: Mapped[str] = mapped_column(default='draft') num: Mapped[int] = mapped_column(default=0) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article') session.add(article) session.commit() print(article.id, article.title, article.status, article.num)

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

"1 article draft 0"

Пример

Давайте используем Optional внутри mapped, чтобы сделать колонку необязательной:

from typing import Optional from sqlalchemy import create_engine from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] text: Mapped[Optional[str]] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article') session.add(article) session.commit() print(article.id, article.title, article.text)

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

"1 article None"

Пример

Давайте запросим данные из таблицы, описанной через mapped, и выведем список заголовков:

from sqlalchemy import create_engine, select from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add_all([ Article(title='article 1'), Article(title='article 2'), Article(title='article 3'), ]) session.commit() res = session.scalars(select(Article.title)).all() print(res)

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

['article 1', 'article 2', 'article 3']

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

  • класс Mapped,
    который представляет аннотированный тип колонки
  • функцию mapped_column,
    которая настраивает параметры колонки
  • класс DeclarativeBase,
    который служит базой для декларативных моделей
  • атрибут __tablename__,
    который задает имя таблицы для модели
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить