관계형 데이터베이스에서 테이블 간의 관계 설정은 매우 중요하다. 이를 위해 Peewee ORM의 ForeignKeyField를 사용하여 간단하게 관계를 설정할 수 있다. 이번 글에서는 Peewee의 ForeignKeyField
를 사용하여 테이블간의 일대다(One-to-Many) 관계를 구현하는 방법에 대해 알아보겠다.
Peewee는 파이썬 객체와 관계형 데이터베이스 간의 매핑을 도와주는 ORM(Object-Relational Mapping) 라이브러리이다. ORM을 사용하면 데이터베이스와 작업할 때 SQL 쿼리를 직접 작성하지 않고도 파이썬 객체로 데이터를 다룰 수 있다.
일대다(One-to-Many) 관계
일대다 관계는 한 테이블의 레코드가 다른 테이블의 여러 레코드와 관계를 맺는 것을 의미한다. 예를 들어, 게시판(Board) 테이블과 게시물(Post) 테이블이 있다고 가정해보자. 하나의 게시판은 여러 개의 게시물을 가지고 있을 수 있다.
이러한 일대다 관계를 구현하기 위해 Peewee에서는 ForeignKeyField를 사용한다. ForeignKeyField는 다른 테이블의 기본 키(PK)와 관계를 맺는데 사용된다.
from peewee import *
# 데이터베이스 연결
database = SqliteDatabase('my_app.db')
# 게시판 모델
class Board(Model):
name = CharField()
# ...
# 게시물 모델
class Post(Model):
title = CharField()
content = TextField()
board = ForeignKeyField(Board, backref='posts')
class Meta:
database = database
위의 예제에서 Post
모델의 board
필드는 Board
모델의 외래 키(ForeignKeyField)로 설정되어 있다. backref
매개변수를 사용하여 역참조를 설정했다. 이렇게 하면 board
에 속한 모든 게시물에 액세스할 수 있는 속성이 생성된다.
사용 예시
# 데이터베이스 연결
database.connect()
database.create_tables([Board, Post])
# 게시판 생성
board = Board.create(name='자유게시판')
# 게시물 생성
post1 = Post.create(title='첫 번째 게시물', content='안녕하세요!')
post2 = Post.create(title='두 번째 게시물', content='반갑습니다!')
# 게시판과 게시물 연결
post1.board = board
post2.board = board
# 저장
post1.save()
post2.save()
# 특정 게시판의 모든 게시물 조회
board_posts = board.posts
for post in board_posts:
print(f'Title: {post.title}, Content: {post.content}')
# 데이터베이스 연결 해제
database.close()
위의 코드에서는 Board
와 Post
를 생성하고 board
와 post
를 연결하는 과정을 보여준다. board.posts
는 해당 게시판에 속한 모든 게시물을 가져오는 역참조이다.
Peewee의 ForeignKeyField를 사용하면 간단하게 일대다 관계를 구현할 수 있다. 이를 통해 객체 간의 관계를 쉽게 표현하고 데이터베이스와 일관된 방식으로 작업할 수 있다.