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

Функция type_coerce

Функция type_coerce приводит выражение к заданному типу на уровне Python, не создавая в итоговом SQL-запросе конструкцию CAST. Первым параметром функция принимает выражение (колонку, литерал или другой SQL-элемент), а вторым - целевой тип из модуля sqlalchemy.types. Это позволяет управлять поведением результата при обработке драйвером, не вмешиваясь в SQL.

Синтаксис

type_coerce(expression, type_)

Пример

Давайте приведем строковый литерал к типу JSON и посмотрим на итоговый SQL-запрос:

from sqlalchemy import type_coerce, literal from sqlalchemy.types import JSON expr = type_coerce(literal('{"status": "active"}'), JSON) print(expr)

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

"{\"status\": \"active\"}"

Пример

Давайте применим type_coerce к колонке и выполним запрос к базе данных:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, type_coerce from sqlalchemy.types import Numeric engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('num', String), ) metadata.create_all(engine) with engine.connect() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article', 'num': '10'}, ]) stmt = select(type_coerce(articles.c.num, Numeric).label('num')) res = conn.execute(stmt).fetchall() print(res)

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

[(Decimal('10'),)]

Пример

Давайте убедимся, что в SQL не появляется CAST:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, type_coerce from sqlalchemy.types import Numeric engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('num', String), ) stmt = select(type_coerce(articles.c.num, Numeric)) print(stmt)

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

SELECT articles.num AS num FROM articles

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

  • функцию cast,
    которая генерирует SQL-функцию CAST
  • функцию try_cast,
    которая выполняет безопасное приведение типа
  • функцию literal,
    которая создает литеральное выражение
  • функцию label,
    которая задает псевдоним для выражения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить