@stead

Как найти записи за определенный используя в tortoise?

У меня есть такая модель
class Activity(BaseModel):
    member = fields.BigIntField()
    activity = fields.CharField(max_length = 128)
    duration = fields.FloatField()
    created_at = fields.DatetimeField(auto_now_add = True)


И я хотел бы получить все записи начиная с n-даты до сегодня. Не нашел способа сделать это. Пробовал варианты с других ORM(возможно в tortoise такая же логика), но не удачно.
Как можно реализовать такое?
  • Вопрос задан
  • 464 просмотра
Решения вопроса 1
Denkuwus
@Denkuwus
15 y.o
Можно использовать метод .filter() в модели Activity и указать аргумент created_at__gte (больше или равно) с нужной датой.

import datetime

n_days_ago = datetime.datetime.now() - datetime.timedelta(days=n)
activity_records = await Activity.filter(created_at__gte=n_days_ago).all()


Он извлечет все записи Activity, в которых поле created_at больше или равно n дням назад.

Можно еще юзать метод .filter() с другими операторами сравнения, такими как __lt (меньше чем), __lte (меньше или равно), __gt (больше чем) и __gte (больше или равно). Например, чтобы получить записи между двумя конкретными датами, можн использовать операторы __gte и __lt:

start_date = datetime.datetime(2022, 1, 1)
end_date = datetime.datetime(2022, 12, 31)
activity_records = await Activity.filter(created_at__gte=start_date, created_at__lt=end_date).all()


Благодаря этому можно получить все записи Activity, в которых поле created_at больше или равно start_date и меньше end_date.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы