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

Метод cast класса ColumnElement

Метод cast класса ColumnElement создает выражение приведения типа. Он принимает тип, к которому нужно привести исходное выражение, и возвращает новый объект ColumnElement. Метод полезен, когда нужно изменить тип колонки прямо в SQL-запросе: например, привести число к строке или строку к числу.

Первым параметром метод принимает тип, к которому выполняется приведение. Тип задается классами из модуля sqlalchemy, например Integer, String, Float или Numeric.

Синтаксис

ColumnElement.cast(type_)

Пример

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

from sqlalchemy import Integer, String, cast 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] num: Mapped[int] stmt = Article.__table__.select().with_only_columns( cast(Article.__table__.c.num, String).label('num_str') ) print(stmt)

Итоговый SQL запрос:

SELECT CAST(articles.num AS VARCHAR) AS num_str FROM articles

Пример

Давайте выполним запрос и посмотрим результат приведения:

from sqlalchemy import Integer, String, cast, create_engine, insert 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] num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.execute(insert(Article), [ {'title': 'article', 'num': 42}, {'title': 'user', 'num': 7}, ]) session.commit() stmt = ( Article.__table__.select() .with_only_columns(cast(Article.__table__.c.num, String)) ) res = session.execute(stmt).all() print(res)

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

[('42',), ('7',)]

Пример

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

from sqlalchemy import Integer, String, cast, create_engine, insert 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] num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.execute(insert(Article), [ {'title': 'article', 'num': 100}, ]) session.commit() expr = cast(Article.__table__.c.title, Integer) print(expr)

Итоговый SQL запрос:

CAST(articles.title AS INTEGER)

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

  • класс ColumnElement,
    который представляет базовый элемент колонки
  • метод label,
    который задает псевдоним для выражения
  • метод concat,
    который объединяет строковые выражения
  • метод op,
    который создает произвольный оператор
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить