Функция between
Функция between создает условие SQL
BETWEEN, которое проверяет, попадает ли
значение колонки в диапазон между нижней и верхней
границами включительно. Первым параметром передается
колонка или выражение, вторым - нижняя граница, третьим -
верхняя граница. Условие возвращает True,
если значение находится в указанном диапазоне.
Синтаксис
between(column, lower_bound, upper_bound)
Пример
Давайте создадим таблицу articles и
выберем строки, у которых значение колонки num
находится в диапазоне от 10 до 20:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, between
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('num', Integer),
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'num': 5},
{'title': 'article 2', 'num': 15},
{'title': 'article 3', 'num': 25},
])
stmt = select(articles.c.title).where(between(articles.c.num, 10, 20))
res = conn.execute(stmt).fetchall()
print(res)
Результат выполнения кода:
[('article 2',)]
Итоговый SQL запрос:
SELECT articles.title
FROM articles
WHERE articles.num BETWEEN 10 AND 20
Пример
Функцию between можно вызывать как метод
колонки. Давайте выберем строки, у которых id
находится в диапазоне от 1 до 2:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('num', Integer),
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'num': 5},
{'title': 'article 2', 'num': 15},
{'title': 'article 3', 'num': 25},
])
stmt = select(articles.c.title).where(articles.c.id.between(1, 2))
res = conn.execute(stmt).fetchall()
print(res)
Результат выполнения кода:
[('article 1',), ('article 2',)]
Итоговый SQL запрос:
SELECT articles.title
FROM articles
WHERE articles.id BETWEEN 1 AND 2
Пример
Функция between поддерживает отрицание через
оператор ~. Давайте выберем строки, у
которых значение num не входит в диапазон
от 10 до 20:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, between
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('num', Integer),
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'num': 5},
{'title': 'article 2', 'num': 15},
{'title': 'article 3', 'num': 25},
])
stmt = select(articles.c.title).where(~between(articles.c.num, 10, 20))
res = conn.execute(stmt).fetchall()
print(res)
Результат выполнения кода:
[('article 1',), ('article 3',)]
Итоговый SQL запрос:
SELECT articles.title
FROM articles
WHERE articles.num NOT BETWEEN 10 AND 20