Search code examples
pythonsqldatabaseormsqlalchemy

SQLAlchemy: how to filter date field?


Here is model:

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

I want to filter between two dates, for example to choose all users in interval 18-30 years.

How to implement it with SQLAlchemy?

I think of:

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

# means age >= 24 and age <= 27

I know this is not correct, but how to do correct?


Solution

  • 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'))