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

Метод slice класса Select

Метод slice класса Select создает срез выборки, ограничивая количество возвращаемых строк диапазоном индексов. Метод принимает три параметра: start, stop и step. Параметры start и step могут быть равны None. Метод работает аналогично встроенной функции slice в Python и преобразуется в SQL-конструкции LIMIT и OFFSET.

Синтаксис

Select.slice(start, stop, step)

Пример

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

from sqlalchemy import create_engine, select, MetaData, Table, Column, Integer, String 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.begin() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article 1'}, {'id': 2, 'title': 'article 2'}, {'id': 3, 'title': 'article 3'}, {'id': 4, 'title': 'article 4'}, {'id': 5, 'title': 'article 5'}, ]) stmt = select(articles).slice(0, 3) res = conn.execute(stmt).fetchall() for row in res: print(row.title)

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

'article 1' 'article 2' 'article 3'

Пример

Давайте пропустим первые две строки и получим следующие три, передав параметры start и stop:

from sqlalchemy import create_engine, select, MetaData, Table, Column, Integer, String 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.begin() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article 1'}, {'id': 2, 'title': 'article 2'}, {'id': 3, 'title': 'article 3'}, {'id': 4, 'title': 'article 4'}, {'id': 5, 'title': 'article 5'}, ]) stmt = select(articles).slice(2, 5) res = conn.execute(stmt).fetchall() for row in res: print(row.title)

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

'article 3' 'article 4' 'article 5'

Пример

Давайте используем параметр step, чтобы выбрать каждую вторую строку:

from sqlalchemy import create_engine, select, MetaData, Table, Column, Integer, String 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.begin() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article 1'}, {'id': 2, 'title': 'article 2'}, {'id': 3, 'title': 'article 3'}, {'id': 4, 'title': 'article 4'}, {'id': 5, 'title': 'article 5'}, ]) stmt = select(articles).slice(0, 5, 2) res = conn.execute(stmt).fetchall() for row in res: print(row.title)

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

'article 1' 'article 3' 'article 5'

Пример

Давайте применим метод slice вместе с методом order_by, чтобы отсортировать строки по убыванию id и взять только первые две:

from sqlalchemy import create_engine, select, MetaData, Table, Column, Integer, String 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.begin() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article 1'}, {'id': 2, 'title': 'article 2'}, {'id': 3, 'title': 'article 3'}, {'id': 4, 'title': 'article 4'}, {'id': 5, 'title': 'article 5'}, ]) stmt = select(articles).order_by(articles.c.id.desc()).slice(0, 2) res = conn.execute(stmt).fetchall() for row in res: print(row.title)

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

'article 5' 'article 4'

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

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