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

Функция literal_column

Функция literal_column создает объект ColumnClause из произвольной строки SQL-выражения. В отличие от bindparam, значение не передается как параметр, а встраивается в текст запроса как есть. Первым параметром функция принимает строку с SQL-выражением. Вторым необязательным параметром можно передать тип данных.

Синтаксис

literal_column(text, [type_])

Пример

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

from sqlalchemy import literal_column expr = literal_column('1 + 1') print(expr)

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

"1 + 1"

Пример

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

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

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

2

Пример

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

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

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

[('article', 7), ('user', 4)]

Пример

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

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, literal_column engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), ) metadata.create_all(engine) with engine.connect() as conn: conn.execute(articles.insert(), [ {'title': 'article'}, {'title': 'user'}, ]) stmt = select(articles.c.title).where(literal_column('length(title)') > 5) res = conn.execute(stmt).fetchall() print(res)

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

[('article',)]

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

SELECT articles.title FROM articles WHERE length(title) > 5

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

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