SQLAlchemy: how to filter date field?
In fact, your query is right except for the typo: your filter is excluding all records: you should change the <=
for >=
and vice versa:
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')
Also you can use between
:
qry = DBSession.query(User).filter(User.birthday.between('1985-01-17', '1988-01-17'))
if you want to get the whole period:
from sqlalchemy import and_, func query = DBSession.query(User).filter(and_(func.date(User.birthday) >= '1985-01-17'),\ func.date(User.birthday) <= '1988-01-17'))
That means range: 1985-01-17 00:00 - 1988-01-17 23:59
from app import SQLAlchemyDB as dbChance.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()
it is equal to:
select count(id)from Chancewhere repo_id=:repo_id and status='1' and date(apple_time) <= end and date(apple_time) >= start
wish can help you.