SQLAlchemy: how to filter date field?

前端 未结 3 861
逝去的感伤
逝去的感伤 2020-12-02 06:37

Here is model:

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

I want to

相关标签:
3条回答
  • 2020-12-02 06:48

    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

    0 讨论(0)
  • 2020-12-02 06:51

    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'))
    
    0 讨论(0)
  • 2020-12-02 07:00
    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()
    

    it is equal to:

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

    wish can help you.

    0 讨论(0)
提交回复
热议问题