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

Функция try_cast

Функция try_cast выполняет приведение значения к указанному типу, возвращая NULL вместо ошибки, если преобразование невозможно. Первым параметром функция принимает выражение или колонку для приведения. Вторым параметром передается целевой тип данных, к которому нужно привести значение.

В отличие от функции cast, которая вызывает ошибку при неудачном преобразовании, try_cast безопасно возвращает NULL. Это особенно полезно при работе с данными, содержащими некорректные значения.

Синтаксис

try_cast(expression, type_)

Пример

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

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, try_cast 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 1', 'num': '10'}, {'id': 2, 'title': 'article 2', 'num': '20'}, {'id': 3, 'title': 'article 3', 'num': 'abc'} ]) stmt = select( articles.c.title, try_cast(articles.c.num, Integer).label('num_int') ) res = conn.execute(stmt) for row in res: print(row)

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

('article 1', 10) ('article 2', 20) ('article 3', None)

Пример

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

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, try_cast engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('num', Integer) ) metadata.create_all(engine) with engine.connect() as conn: conn.execute(articles.insert(), [ {'id': 1, 'num': 100}, {'id': 2, 'num': 200} ]) stmt = select( articles.c.num, try_cast(articles.c.num, String).label('num_str') ) res = conn.execute(stmt) for row in res: print(row)

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

(100, '100') (200, '200')

Пример

Давайте применим try_cast в условии WHERE для фильтрации строк, которые можно преобразовать в число:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, try_cast 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 1', 'num': '15'}, {'id': 2, 'title': 'article 2', 'num': 'abc'}, {'id': 3, 'title': 'article 3', 'num': '30'} ]) casted = try_cast(articles.c.num, Integer) stmt = select(articles.c.title).where(casted > 20) res = conn.execute(stmt) for row in res: print(row)

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

('article 3',)

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

SELECT articles.title FROM articles WHERE TRY_CAST(articles.num AS INTEGER) > 20

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

  • функцию cast,
    которая выполняет строгое приведение типов
  • функцию type_coerce,
    которая выполняет приведение типов на уровне Python
  • функцию func.coalesce,
    которая возвращает первое не NULL значение
  • функцию func.nullif,
    которая возвращает NULL при равенстве значений
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить