0Pricing
Python Academy · 강의

관계와 조인

관련 테이블 모델링하기

관계와 조인은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

관련 테이블

실제 데이터는 서로 연결되어 있습니다. 저자에게는 여러 권의 책이 있고 주문에는 여러 항목이 있습니다. SQLAlchemy에서는 관계와 외래 키로 이러한 연결을 모델링합니다.

# Author 1 --- many --- Book
# A foreign key on Book points back to Author
print('One-to-many is the most common link')

외래 키

외래 키 열은 관련 행의 기본 키를 저장합니다. ForeignKey('table.column')으로 선언합니다.

from sqlalchemy import ForeignKey
from sqlalchemy.orm import Mapped, mapped_column
# author_id: Mapped[int] = mapped_column(ForeignKey('authors.id'))
print('ForeignKey links child to parent')

부모 정의하기

부모 모델은 relationship()을 사용하여 자식 객체의 컬렉션을 저장합니다.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship
from typing import List
class Base(DeclarativeBase):
    pass
class Author(Base):
    __tablename__ = 'authors'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    books: Mapped[List['Book']] = relationship(back_populates='author')
print('Author.books holds related Book objects')

자식 정의하기

자식 모델에는 외래 키 열과 부모를 가리키는 relationship()이 있습니다.

from sqlalchemy import ForeignKey
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship
class Base(DeclarativeBase):
    pass
class Book(Base):
    __tablename__ = 'books'
    id: Mapped[int] = mapped_column(primary_key=True)
    title: Mapped[str]
    author_id: Mapped[int] = mapped_column(ForeignKey('authors.id'))
    author: Mapped['Author'] = relationship(back_populates='books')
print('Book.author points to its parent')

back_populates

back_populates는 두 관계를 연결하므로 한쪽을 업데이트하면 다른 쪽에도 자동으로 반영됩니다.

# author.books.append(book) also sets book.author = author
# Both sides stay in sync automatically
print('back_populates keeps both sides consistent')

관계 탐색하기

연결이 완료되면 일반 속성처럼 관계를 탐색할 수 있습니다. author.books는 목록이고 book.author는 부모 객체입니다.

# for book in author.books:
#     print(book.title)
# print(book.author.name)
print('Navigate with plain attribute access')

그래프 구성하기

자식 객체를 부모의 컬렉션에 추가합니다. 부모를 세션에 추가하면 자식 객체에도 연쇄적으로 적용됩니다.

# a = Author(name='Rowling')
# a.books.append(Book(title='Book 1'))
# session.add(a)
# session.commit()  # author and book both saved
print('Cascade saves the whole object graph')

암시적 조인

book.author에 접근하면 SQLAlchemy가 관련 행을 자동으로 불러옵니다. 이러한 지연 로딩은 내부적으로 이루어집니다.

# Accessing book.author runs a SELECT if not loaded yet
# This is lazy loading
print('Lazy loading fetches related rows on access')

명시적 조인

테이블을 가로질러 필터링하려면 select에서 join()을 사용합니다. 그러면 SQL JOIN이 생성됩니다.

from sqlalchemy import select
# stmt = select(Book).join(Author).where(Author.name == 'Rowling')
# books = session.scalars(stmt).all()
print('join(Author) filters across the relationship')

즉시 로딩

작은 조회를 여러 번 실행하는 것을 피하려면 joinedload 또는 selectinload로 관련 행을 미리 불러옵니다.

from sqlalchemy import select
from sqlalchemy.orm import selectinload
# stmt = select(Author).options(selectinload(Author.books))
print('selectinload preloads children in one extra query')

다대다 관계

다대다 연결에서는 연결 테이블이 양쪽을 이어 줍니다. relationship()은 secondary=를 사용하여 해당 테이블을 가리킵니다.

# students <-> courses via a 'enrollments' association table
# courses: Mapped[List['Course']] = relationship(secondary=enrollments)
print('secondary= models many-to-many')

간단한 확인

관계에 대한 지식을 확인합니다.

복습

관련 테이블을 모델링하는 방법을 배웠습니다.

  • ForeignKey는 자식 열에 연결 정보를 저장합니다
  • back_populates와 함께 사용하는 relationship()은 양쪽을 연결합니다
  • 연결을 일반 속성처럼 탐색하며, 지연 로딩은 접근할 때 데이터를 가져옵니다
  • join()은 테이블을 가로질러 필터링하고, selectinload는 즉시 로딩하며, secondary=는 다대다 관계를 처리합니다

자주 묻는 질문

“관계와 조인” 강의는 무료인가요?

네 — “관계와 조인” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“관계와 조인”에서 뭘 배우나요?

관련 테이블 모델링하기 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Python Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“관계와 조인” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. SQLAlchemy Core와 ORM 비교
  2. 모델 정의하기
  3. Session으로 쿼리하기
  4. 관계와 조인
← Python Academy(으)로 돌아가기