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

Метод with_hint

Метод with_hint класса Select добавляет в SQL-запрос подсказки оптимизатору СУБД. Первым параметром метод принимает таблицу или объект, к которому относится подсказка. Вторым параметром передаётся строка с текстом подсказки. Третий необязательный параметр dialect_name ограничивает применение подсказки конкретным диалектом СУБД. Метод возвращает новый объект Select.

Синтаксис

select(table).with_hint(table, text, [dialect_name])

Пример

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

from sqlalchemy import create_engine, String 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] = mapped_column(String(100)) text: Mapped[str] = mapped_column(String(500)) status: Mapped[str] = mapped_column(String(50)) num: Mapped[int] = mapped_column()

Теперь построим запрос с подсказкой:

from sqlalchemy import select from models import Article stmt = select(Article).with_hint(Article, 'INDEX(articles idx_title)') print(stmt)

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

"SELECT articles.id, articles.title, articles.text, articles.status, articles.num FROM articles INDEX(articles idx_title)"

Пример

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

from sqlalchemy import select from models import Article stmt = select(Article).with_hint( Article, 'INDEX(articles idx_status)', 'sqlite' ) print(stmt)

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

SELECT articles.id, articles.title, articles.text, articles.status, articles.num FROM articles INDEX(articles idx_status)

Пример

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

from sqlalchemy import select from models import Article stmt = ( select(Article) .where(Article.status == 'published') .with_hint(Article, 'INDEX(articles idx_status)') ) print(stmt)

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

SELECT articles.id, articles.title, articles.text, articles.status, articles.num FROM articles INDEX(articles idx_status) WHERE articles.status = 'published'

Пример

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

from sqlalchemy import select from models import Article stmt = ( select(Article) .with_hint(Article, 'INDEX(articles idx_title)') .with_hint(Article, 'INDEX(articles idx_status)') ) print(stmt)

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

SELECT articles.id, articles.title, articles.text, articles.status, articles.num FROM articles INDEX(articles idx_title) INDEX(articles idx_status)

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

  • класс Select,
    который представляет SQL-запрос SELECT
  • метод prefix_with,
    который добавляет префикс к SQL-запросу
  • метод suffix_with,
    который добавляет суффикс к SQL-запросу
  • метод execution_options,
    который задает опции выполнения запроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить