sqlalchemy 문장의 여러 filter 조건을 합쳐서 각각 limit 4개씩 가져오기???
조회수 1949회
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 로 한것이고 데이터는 하기 링크 참고하세요.
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
댓글 입력