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

Функция literal

Функция literal создает выражение BindParameter с флагом literal_execute, которое представляет литеральное значение в SQL-запросе. Первым параметром функция принимает значение, которое нужно вставить в запрос. Вторым необязательным параметром можно указать тип этого значения. В отличие от обычных параметров привязки, литеральное значение подставляется непосредственно в текст SQL-запроса на стороне драйвера, а не передается отдельно.

Синтаксис

literal(value, [type_])

Пример

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

from sqlalchemy import literal expr = literal('article') print(expr)

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

"literal('article')"

Пример

Давайте используем функцию literal в SELECT-запросе для выбора константы:

from sqlalchemy import create_engine, select, literal engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: stmt = select(literal('article')) res = conn.execute(stmt).scalar() print(res)

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

"article"

Пример

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

from sqlalchemy import create_engine, select, literal, Integer engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: stmt = select(literal(10, Integer)) res = conn.execute(stmt).scalar() print(res)

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

10

Пример

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

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, literal 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.connect() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article 1', 'status': 'published'}, {'id': 2, 'title': 'article 2', 'status': 'draft'} ]) stmt = select(articles.c.title).where( articles.c.status == literal('published') ) res = conn.execute(stmt).scalars().all() print(res)

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

['article 1']

Пример

Давайте посмотрим, как выглядит итоговый SQL-запрос при использовании literal:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, literal from sqlalchemy.dialects import sqlite metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('status', String) ) stmt = select(articles.c.title).where( articles.c.status == literal('published') ) print(stmt.compile(dialect=sqlite.dialect()))

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

SELECT articles.title FROM articles WHERE articles.status = 'published'

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

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