Метод self_group
Метод self_group класса ColumnElement
создает группировку выражения, оборачивая его
в круглые скобки. Метод принимает необязательный
параметр against, который указывает элемент,
против которого выполняется группировка.
Если параметр не передан, возвращается новый
объект группировки.
Синтаксис
self_group(against=None)
Пример
Давайте создадим простое выражение и применим
к нему метод self_group:
from sqlalchemy import column, and_
expr = and_(column('id') > 1, column('id') < 10)
grouped = expr.self_group()
print(grouped)
Результат выполнения кода:
"(id > :id_1 AND id < :id_2)"
Пример
Давайте применим метод self_group
с параметром against для группировки
относительно другого элемента:
from sqlalchemy import column
left = column('num') > 5
right = column('num') < 100
grouped = left.self_group(against=right)
print(grouped)
Результат выполнения кода:
"num > :num_1"
Пример
Давайте посмотрим, как метод self_group
влияет на итоговый SQL-запрос при выборке
из таблицы:
from sqlalchemy import select, column, and_
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
expr = and_(column('num') > 1, column('num') < 10)
grouped = expr.self_group()
stmt = select(Article).where(grouped)
print(stmt)
Итоговый SQL запрос:
SELECT articles.id, articles.title
FROM articles
WHERE (num > :num_1 AND num < :num_2)
Пример
Давайте применим метод self_group
к вложенному выражению:
from sqlalchemy import column, or_, and_
inner = and_(column('status') == 'article', column('num') > 5)
inner_grouped = inner.self_group()
outer = or_(inner_grouped, column('num') < 1)
print(outer)
Результат выполнения кода:
"((status = :status_1 AND num > :num_1) OR num < :num_2)"
Смотрите также
-
класс
ColumnElement,
который представляет базовый элемент столбца -
метод
operate,
который выполняет операцию над элементом -
метод
reverse_operate,
который выполняет обратную операцию над элементом -
метод
bool_op,
который создает булеву операцию над элементом