Функция extract
Функция extract извлекает отдельный компонент даты или времени, например год, месяц, день или час, из выражения с типом даты. Первым параметром передаётся имя извлекаемой части в виде строки, а вторым - выражение столбца с датой или временем. Функция возвращает объект выражения SQL, который можно использовать в запросах, фильтрах и сортировке.
Синтаксис
extract(field, expr)
Пример
Давайте создадим таблицу с датами и извлечём из них год:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Date, extract
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('pub_date', Date)
)
metadata.create_all(engine)
with engine.begin() as conn:
conn.execute(articles.insert(), [
{'id': 1, 'title': 'article 1', 'pub_date': '2024-01-15'},
{'id': 2, 'title': 'article 2', 'pub_date': '2024-06-20'}
])
query = extract('year', articles.c.pub_date)
with engine.connect() as conn:
res = conn.execute(query).fetchall()
print(res)
Результат выполнения кода:
[(2024,), (2024,)]
Пример
Давайте извлечём месяц и будем использовать его в условии:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Date, extract
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('pub_date', Date)
)
metadata.create_all(engine)
with engine.begin() as conn:
conn.execute(articles.insert(), [
{'id': 1, 'title': 'article 1', 'pub_date': '2024-01-15'},
{'id': 2, 'title': 'article 2', 'pub_date': '2024-06-20'}
])
query = articles.select().where(extract('month', articles.c.pub_date) == 1)
with engine.connect() as conn:
res = conn.execute(query).fetchall()
print(res)
Результат выполнения кода:
[(1, 'article 1', datetime.date(2024, 1, 15))]
Итоговый SQL запрос:
SELECT articles.id, articles.title, articles.pub_date
FROM articles
WHERE EXTRACT(month FROM articles.pub_date) = 1
Пример
Давайте извлечём день и отсортируем статьи по нему:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Date, extract
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('pub_date', Date)
)
metadata.create_all(engine)
with engine.begin() as conn:
conn.execute(articles.insert(), [
{'id': 1, 'title': 'article 1', 'pub_date': '2024-01-20'},
{'id': 2, 'title': 'article 2', 'pub_date': '2024-01-05'}
])
query = articles.select().order_by(extract('day', articles.c.pub_date))
with engine.connect() as conn:
res = conn.execute(query).fetchall()
print(res)
Результат выполнения кода:
[(2, 'article 2', datetime.date(2024, 1, 5)), (1, 'article 1', datetime.date(2024, 1, 20))]
Итоговый SQL запрос:
SELECT articles.id, articles.title, articles.pub_date
FROM articles
ORDER BY EXTRACT(day FROM articles.pub_date)
Смотрите также
-
функцию
cast,
которая приводит выражение к заданному типу -
функцию
case,
которая строит условное выражение SQL -
функцию
now,
которая возвращает текущую дату и время -
функцию
current_date,
которая возвращает текущую дату