web2py는 파이썬에서 웹 애플리케이션을 개발하기 위한 프레임워크로서, 데이터베이스와의 관계를 손쉽게 구축하고 관리할 수 있는 기능을 제공합니다. 이번 블로그 포스트에서는 web2py에서의 데이터베이스 관계에 대해 알아보겠습니다.
데이터베이스 설정
web2py에서는 데이터베이스 연결 정보를 db.py
파일에 설정합니다. 이 파일에서 데이터베이스 설정과 테이블 정의를 할 수 있습니다. 아래는 MySQL 데이터베이스에 연결하는 예제입니다.
# db.py
from gluon.contrib.appconfig import AppConfig
# 설정 파일(appconfig.ini)로부터 데이터베이스 연결 정보를 가져옴
myconf = AppConfig(reload=True)
# 데이터베이스 설정
db = DAL(myconf.take('db.uri'),
pool_size=myconf.take('db.pool_size', cast=int),
migrate_enabled=myconf.take('db.migrate', cast=bool),
migrate=myconf.take('db.migrate_suffix'),
check_reserved=['all'])
위의 예제에서는 db.uri
와 같은 설정을 사용하여 데이터베이스 연결을 설정하였습니다. 또한, migrate_enabled
옵션을 통해 데이터베이스 마이그레이션을 활성화할 수 있습니다.
테이블 정의
web2py에서는 테이블을 정의하기 위해 db.define_table()
함수를 사용합니다. 테이블 정의는 db.py
파일이나 웹 애플리케이션의 모델 파일에 작성할 수 있습니다. 아래는 users
테이블을 정의하는 예제입니다.
# db.py 혹은 모델 파일
# users 테이블 정의
db.define_table('users',
Field('name', 'string', required=True),
Field('email', 'string', required=True, unique=True),
Field('password', 'password', required=True),
Field('created_on', 'datetime', default=request.now),
format='%(name)s')
# users 테이블 인덱스 생성
db.users.email.requires = IS_EMAIL()
db.users.name.requires = IS_NOT_EMPTY()
위의 예제에서는 db.define_table()
함수를 사용하여 users
테이블을 정의하였습니다. 각 필드의 데이터 타입과 제약 조건을 설정할 수 있으며, format
옵션을 통해 테이블의 출력 형식을 설정할 수도 있습니다.
데이터베이스 관계 설정
web2py에서는 관계형 데이터베이스의 관계를 간편하게 설정할 수 있습니다. 예를 들어, users
테이블과 posts
테이블이 1:N 관계일 경우, 아래와 같이 관계 설정을 할 수 있습니다.
# db.py 혹은 모델 파일
# posts 테이블 정의
db.define_table('posts',
Field('title', 'string', required=True),
Field('content', 'text', required=True),
Field('created_by', 'reference users', required=True),
Field('created_on', 'datetime', default=request.now))
위의 예제에서 created_by
필드는 users
테이블과의 관계를 설정한 것입니다. 이를 통해 posts
테이블의 레코드가 특정 사용자와 연결될 수 있습니다. 이제 created_by
필드를 통해 사용자와 게시글을 연결하여 쿼리를 수행할 수 있습니다.
# 웹 애플리케이션의 컨트롤러
# 사용자의 게시글 목록을 조회하는 컨트롤러 함수
def user_posts():
user_id = request.args(0)
user_posts = db(db.posts.created_by == user_id).select()
return dict(posts=user_posts)
위의 예제에서는 db.posts.created_by == user_id
조건을 통해 특정 사용자의 게시글을 조회하고 있습니다. 이렇게 간단하게 데이터베이스 관계를 설정하면서 웹 애플리케이션의 기능을 구현할 수 있습니다.
마무리
web2py의 강력한 데이터베이스 관계 설정 기능을 통해 데이터베이스와의 상호작용을 손쉽게 할 수 있습니다. 이번 포스트에서는 데이터베이스 설정, 테이블 정의, 그리고 데이터베이스 관계 설정에 대해 알아보았습니다. web2py를 활용하여 웹 애플리케이션을 개발할 때, 이러한 기능들을 적절히 활용하여 더욱 효율적이고 유지보수가 용이한 코드를 작성할 수 있습니다.