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

Функция synonym

Функция synonym создает синоним для атрибута модели SQLAlchemy. Первым параметром функция принимает имя существующего атрибута, для которого создается синоним. Это позволяет обращаться к одному и тому же столбцу таблицы под разными именами, что удобно при переименовании полей или при необходимости иметь несколько вариантов доступа к данным. Синоним работает как в Python-коде, так и в запросах на уровне ORM.

Синтаксис

synonym(name, [map_column], [descriptor])

Пример

Давайте создадим модель с синонимом для столбца title, чтобы обращаться к нему как heading:

from sqlalchemy import create_engine, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, synonym, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(100)) heading = synonym('title') engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article 1') session.add(article) session.commit() res = session.query(Article).first() print(res.heading)

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

"article 1"

Пример

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

from sqlalchemy import create_engine, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, synonym, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(100)) text: Mapped[str] = mapped_column(String(500)) heading = synonym('title') engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(text='some text') article.heading = 'article 2' session.add(article) session.commit() res = session.query(Article).first() print(res.title) print(res.heading)

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

"article 2" "article 2"

Пример

Давайте используем параметр map_column, чтобы синоним автоматически отображался на существующий столбец базы данных:

from sqlalchemy import create_engine, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, synonym, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(100)) heading = synonym('title', map_column=True) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article 3') session.add(article) session.commit() res = session.query(Article).filter(Article.heading == 'article 3').first() print(res.title)

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

"article 3"

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

  • функцию column_property,
    которая создает вычисляемый атрибут модели
  • функцию deferred,
    которая откладывает загрузку столбца
  • функцию mapped_column,
    которая описывает столбец модели
  • функцию composite,
    которая объединяет несколько столбцов в один атрибут
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить