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

Функция case

Функция case создает SQL-выражение CASE для условной логики внутри запроса. Первым параметром передается список кортежей вида (условие, значение). Параметр value задает выражение, с которым сравниваются условия. Параметр else_ определяет значение по умолчанию, если ни одно условие не выполнено.

Синтаксис

case(*whens, value=None, else_=None)

Пример

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

from sqlalchemy import case res = case((1 == 1, 'yes'), else_='no') print(res)

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

"CASE WHEN (1 = 1) THEN :param_1 ELSE :param_2 END"

Пример

Давайте применим функцию case к таблице articles, чтобы вывести статус статьи текстом:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, case, select engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('status', String), ) metadata.create_all(engine) with engine.begin() as conn: conn.execute(articles.insert(), [ {'title': 'article 1', 'status': 'published'}, {'title': 'article 2', 'status': 'draft'}, ]) status_label = case( (articles.c.status == 'published', 'Опубликовано'), (articles.c.status == 'draft', 'Черновик'), else_='Неизвестно', ).label('status_text') stmt = select(articles.c.title, status_label) with engine.connect() as conn: for row in conn.execute(stmt): print(row)

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

('article 1', 'Опубликовано') ('article 2', 'Черновик')

Пример

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

from sqlalchemy import case status = 'published' res = case( {'published': 'Опубликовано', 'draft': 'Черновик'}, value=status, else_='Неизвестно', ) print(res)

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

CASE :param_1 WHEN :param_2 THEN :param_3 WHEN :param_4 THEN :param_5 ELSE :param_6 END

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

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