SQLAlchemy игнорирует None при сравнении даты

#python #python-3.x #postgresql #sqlalchemy

#python #python-3.x #postgresql #sqlalchemy

Вопрос:

Я хотел бы получить строки из указанного диапазона дат, но когда ограничитель равен None (beg_date==None, fin_date==None) Я хочу игнорировать область видимости с одной стороны.

Например: если beg_date==’2019-10-23′ и fin_date==None, я хотел бы получить обновленные строки с 2019-10-23. Как я могу добиться этого с помощью SQLAlchemy?

Модель:

 class MyModel(Model):
    date = Column(Date)
  

Код:

 beg_date = some_dict.get('beg_date')
fin_date = some_dict.get('fin_date')

session.query(MyModel).filter(MyModel.date.between(beg_date, find_date)
  

Ответ №1:

Вы могли бы создать свое условие даты с помощью условий Python start_date и end_date перед построением всего вашего запроса:

 if start_date and end_date:
    date_condition = MyModel.date.between(start_date, end_date)
elif start_date:
    date_condition = MyModel.date > start_date
elif end_date:
    date_condition = MyModel.date < end_date
else:
    date_condition = true()  # sqlalchemy.true()

session.query(MyModel).filter(date_condition)
  

Я не тестировал его, но он должен работать с возможными незначительными исправлениями.