[SQLAlchemy] 테이블 JOIN하기

happypath·2021년 11월 19일
0

SQL

목록 보기
3/6

프로젝트 진행중, SQLAlchemy에서 서로 다른 두 개의 테이블(books, rent)을 join해야 하는 상황.
나의 엄청난 고민이 보이는가... aka 삽질....ㅎ

주석으로 달린 코드들이 이것 저것 시도해 본 것이다. 그리고 결국 공식 api 문서를 참고해서 해결!!!



#Books & Rent 모델을 inner join 하는 심플(?)한 과정

rent_list = Books.query.join(Books.rent)
.filter(Rent.user_id ==  session.get('login')).all()

기존 sql 문법과는 달라서 신기했던 부분이 Books.rent 이 부분인데,
서로 다른 두 모델을 join해 주는 조건에는 두 테이블을 저렇게 " . " 으로 연결하기만 하면 된다고 한다.

왜 앞에 Books는 대문자로하고 rent는 소문자로 하는지 아직 이해 중이긴하지만.... join 쿼리가 돌아가는 순간 그 느꼈던 행복....ㅠㅠㅠ엉엉

공식 api문서를 링크로 걸어 놨으니 차분히 더 읽어 볼 예정이다.

참고사이트1

공식API문서


삽질의 흔적을 영광스럽게 남깁니다. (모두 다 똑같은 쿼리를 의도한 것입니다)

----------------------틀린쿼리!!!

#rent_list = Books.query.join(Books.rent).filter(Rent.user_id ==  session.get('login')).all()
#rent_list = Books.query.join(Rent, Rent.book_id == Books.id).all()
#rent_list = Rent.query.filter(Rent.user_id == session.get('login')).join(Books, Rent.book_id == Books.id).all()
# rent_list = rent_list.query.filter(rent_list.user_id == session.get('login')).all()
# for rent in rent_list:
#     print(rent)
#rent_list = db.session.query(Rent, Books).filter(Rent.book_id == Books.id).all()
#rent_list = Rent.query.filter(Rent.user_id == g.user.id).all()

Inner join을 사용하기 전에 아래 글을 읽고 성능은 어떠한 지에 대해 고민도 해봤으나, 현재 데이터 양이 많지 않기에 inner join을 그대로 사용하기로 결정했다.

0개의 댓글