[python] 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

이것이 정확하지 않다는 것을 알고 있지만 어떻게 수정해야합니까?



답변

사실, 오타를 제외하고는 쿼리가 맞습니다. 필터가 모든 레코드를 제외하고 있습니다. <=for를 변경해야 >=하며 그 반대도 마찬가지입니다.

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

소원이 당신을 도울 수 있습니다.


답변

전체 기간 을 얻으려면 :

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

즉 범위 : 1985-01-17 00 : 00-1988-01-17 23:59


답변