SQLAlchemy: как фильтровать поле даты?


вот модели:

class User(Base):
    ...
    birthday = Column(Date, index=True)   #in database it's like '1987-01-17'
    ...

Я хочу, чтобы фильтр между двумя датами, например, чтобы выбрать всех пользователей в интервале 18-30 лет.

Как реализовать его с помощью SQLAlchemy?

Я думаю:

query = DBSession.query(User).filter(
    and_(User.birthday >= '1988-01-17', User.birthday <= '1985-01-17')
) 

# means age >= 24 and age <= 27

Я знаю, что это не правильно, но как это сделать правильно?

спасибо заранее!

2 75

2 ответа:

фактически, ваш запрос прав, за исключением опечатки: ваш фильтр исключает все записи: вы должны изменить <= на >= и наоборот:

qry = DBSession.query(User).filter(
        and_(User.birthday <= '1988-01-17', User.birthday >= '1985-01-17'))
# or same:
qry = DBSession.query(User).filter(User.birthday <= '1988-01-17').\
        filter(User.birthday >= '1985-01-17')

также вы можете использовать between:

qry = DBSession.query(User).filter(User.birthday.between('1985-01-17', '1988-01-17'))
from app import SQLAlchemyDB as db

Chance.query.filter(Chance.repo_id==repo_id, 
                    Chance.status=="1", 
                    db.func.date(Chance.apply_time)<=end, 
                    db.func.date(Chance.apply_time)>=start).count()

он равен:

select
   count(id)
from
   Chance
where
   repo_id=:repo_id 
   and status='1'
   and date(apple_time) <= end
   and date(apple_time) >= start

желание может помочь вам.