Получение данных за последний месяц из БД с помощью ORM peewee на python
Начинаю работу с ORM peewee на python, у меня есть таблица с полем date = DateTimeField(), мне необходимо выгружать из данной таблицы все записи у которых столбец "date" равен предыдущему месяцу.
class Jobs(BaseModel):
date = DateTimeField()
user_id = ForeignKeyField(Users)
service_id = ForeignKeyField(Services)
comment = TextField()
Обычный SQL запрос я делаю так:
SELECT * FROM jobs WHERE date_part('month', date) = date_part('now', 'start of month');
По инструкции в peewee это делается, с помощью fn.date_part, но не совсем понимаю как это использовать. Подскажите, пожалуйста, как реализовать данный запрос в peewee?
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Думаю, должно получиться так:
import datetime as DT
# Предыдущий месяц
prev_month = DT.date.today().replace(day=1) - DT.timedelta(days=1)
query = Jobs.select().where(fn.date_part('month', Jobs.date) == prev_month.month)
Думаю, лучше добавить в условие год:
query = Jobs.select().where(
(fn.date_part('month', Jobs.date) == prev_month.month)
& (fn.date_part('year', Jobs.date) == prev_month.year)
)
! Кст, peewee сам может в date_part обернуть условия в запросе, поэтому попробуйте так:
query = Jobs.select().where(
(Jobs.date.month == prev_month.month) & (Jobs.date.year == prev_month.year)
)
Делал на основе примера