복붙노트

[PYTHON] SQLAlchemy : 날짜 필드를 필터링하는 방법?

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

나는 이것이 정확하지 않다는 것을 알고 있지만, 올바른 방법은 무엇입니까?

미리 감사드립니다!

해결법

  1. ==============================

    1.실제로 필터는 오타를 제외하고 모든 레코드를 제외합니다. <= for> = 및 그 반대로 변경해야합니다.

    실제로 필터는 오타를 제외하고 모든 레코드를 제외합니다. <= 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')
    

    또한 사이에 사용할 수 있습니다 :

    qry = DBSession.query(User).filter(User.birthday.between('1985-01-17', '1988-01-17'))
    
  2. ==============================

    2.

    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
    

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

  3. from https://stackoverflow.com/questions/8895208/sqlalchemy-how-to-filter-date-field by cc-by-sa and MIT license