sqlalchemy 문장의 여러 filter 조건을 합쳐서 각각 limit 4개씩 가져오기???

조회수 1926회
ended_94 = db.session.query(Ended_event).filter(Ended_event.league_id == 94).order_by(Ended_event.time.desc()).limit(4)
ended_99 = db.session.query(Ended_event).filter(Ended_event.league_id == 99).order_by(Ended_event.time.desc()).limit(4)
ended_123 = db.session.query(Ended_event).filter(Ended_event.league_id == 123).order_by(Ended_event.time.desc()).limit(4)
ended_207 = db.session.query(Ended_event).filter(Ended_event.league_id == 207).order_by(Ended_event.time.desc()).limit(4)

이렇게 각각 leauge_id 값에따라 time값 순으로 limit(4)씩 가져오는데요 혹시 이 걸 명령어 한 줄로 바 꿀 수 있을까요?

1 답변

  • 복잡한 쿼리는 그냥 raw query 로 하세요.

    아래 샘플은 sqlite 로 한것이고 데이터는 하기 링크 참고하세요.

    https://www.sqlitetutorial.net/sqlite-sample-database/

    query = """SELECT * FROM (
        SELECT
            ROW_NUMBER () OVER ( 
                PARTITION BY Country
                ORDER BY FirstName
            ) RowNum, FirstName, LastName, country, CustomerId 
        FROM
            customers
        WHERE 
            country in ('Canada', 'USA')
    ) WHERE RowNum < 3"""  # Canada, USA 두개씩.
    
    rows = session.execute(query)
    
    for r in rows:
        print(r)
    
    (1, 'Aaron', 'Mitchell', 'Canada', 32)
    (2, 'Edward', 'Francis', 'Canada', 30)
    (1, 'Dan', 'Miller', 'USA', 20)
    (2, 'Frank', 'Harris', 'USA', 16)
    
    
    # 매퍼로 받을때
    rows = session.query(customers).from_statement(query).all()
    for r in rows:
        print(r.Country)
    
    Canada
    Canada
    USA
    USA
    
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)