파이썬 장고 모델(ORM): 데이터 조회, 저장, 수정 및 삭제 방법

파이썬 장고 모델(ORM): 데이터 조회, 저장, 수정 및 삭제 방법

이 글에서는 파이썬과 장고 ORM을 사용하여 데이터를 조회, 저장, 수정 및 삭제하는 방법에 대해 알아보겠습니다. 예제로 ‘Post’와 ‘Comment’라는 두 가지 모델을 사용할 것입니다.

1. 장고 셸 실행하기

장고 프로젝트에서 모델을 조작하기 전에, 장고 셸을 시작해야 합니다.

python manage.py shell

이 명령어는 장고 프로젝트의 환경에서 대화형 파이썬 셸을 열어, 모델과 상호작용할 수 있게 해줍니다. 이제 이 셸을 사용하여 모델 인스턴스를 생성, 조회, 수정, 삭제 등의 작업을 할 수 있습니다.

2. 모델 인스턴스 생성 및 저장

다음으로, ‘Post’ 모델의 인스턴스를 생성하고 저장하는 방법을 살펴보겠습니다. 아래 코드는 장고 셸 내에서 ‘Post’ 인스턴스를 만들고 저장하는 과정입니다.

from myapp.models import Post
from django.utils import timezone

post = Post(title='제목1', content='내용1 입니다.', created_date=timezone.now())
post.save()

먼저, from myapp.models import Post는 ‘Post’ 모델을 임포트합니다. 이렇게 하면 장고 셸에서 ‘Post’ 모델을 사용할 수 있습니다. 그 다음, from django.utils import timezone를 사용하여 장고의 타임존 관련 유틸리티를 불러옵니다. 이는 날짜와 시간을 다룰 때 필요합니다.

다음으로, Post 클래스의 인스턴스를 생성합니다. title='제목1'content='내용1 입니다.'은 ‘Post’ 모델의 필드에 해당하는 값을 설정합니다. created_date=timezone.now()는 게시글의 생성 날짜와 시간을 현재 시간으로 설정합니다.

마지막 post.save() 명령은 새로 생성된 ‘Post’ 인스턴스를 데이터베이스에 저장합니다. 이 작업을 통해 ‘Post’ 인스턴스가 실제로 데이터베이스에 저장되며, 나중에 조회나 수정이 가능해집니다.

모델 인스턴스 생성 및 저장 예시
데이터베이스 저장 예시 화면

3. 데이터베이스에서 데이터 조회

장고 ORM을 사용하여 데이터베이스에서 데이터를 조회하는 방법을 알아보겠습니다. 다음은 ‘Post’ 모델의 모든 인스턴스를 조회하는 예제입니다.

Post.objects.all()

Post.objects.all() 명령어는 데이터베이스에 저장된 모든 ‘Post’ 인스턴스를 조회합니다. 이 명령어의 실행 결과는 ‘QuerySet’ 객체로 반환됩니다. ‘QuerySet’은 장고 모델의 인스턴스들의 컬렉션이며, 데이터베이스 쿼리의 결과를 나타냅니다.

예를 들어, >>> Post.objects.all()을 실행했을 때 <QuerySet [<Post: Post object (1)>]> 같은 출력이 나타나면, 이는 데이터베이스에 저장된 ‘Post’ 인스턴스가 하나 있으며, 해당 인스턴스의 ID는 1임을 의미합니다. 여기서 <Post: Post object (1)> 는 ‘Post’ 모델의 인스턴스를 나타내며, ‘(1)’은 데이터베이스에서 해당 인스턴스의 고유 ID를 의미합니다.

이러한 ‘QuerySet’은 추가적인 필터링, 정렬, 슬라이싱 등 다양한 데이터베이스 연산을 지원합니다. 예를 들어, 특정 조건을 만족하는 객체만 필터링하거나, 결과를 특정 순서로 정렬하는 등의 작업을 할 수 있습니다.

특정 조건을 만족하는 인스턴스만 필터링하여 조회하는 방법도 있습니다.

Post.objects.filter(title__contains='제목')

Post.objects.filter(title__contains='제목') 명령어는 ‘Post’ 모델의 인스턴스 중에서 ‘title’ 필드에 ‘제목’이 포함된 인스턴스만을 필터링하여 반환합니다. 이 명령어는 조건에 맞는 모든 인스턴스를 포함하는 ‘QuerySet’ 객체를 결과로 제공합니다.

예를 들어, >>> Post.objects.filter(title__contains='제목')을 실행했을 때 <QuerySet [<Post: Post object (1)>]>와 같은 출력이 나타난다면, 이는 ‘title’ 필드에 ‘제목’을 포함하는 ‘Post’ 인스턴스가 최소 한 개 이상 존재하며, 이 중 하나의 인스턴스 ID는 1임을 의미합니다. 이 ‘QuerySet’ 객체는 필터링된 결과를 나타내며, 추가적인 쿼리 연산을 수행할 수 있습니다.

‘filter’ 메소드는 매우 유연하며, 다양한 조회 조건을 적용할 수 있습니다. 예를 들어, 특정 필드의 값이 주어진 문자열을 포함하거나, 특정 범위의 날짜에 해당하는 객체를 필터링하는 등의 작업을 할 수 있습니다. 이 방법은 복잡한 데이터베이스 쿼리를 간단하고 직관적인 방식으로 수행할 수 있게 해줍니다.

데이터베이스에서 데이터 조회 예시

4. 데이터 수정

이미 저장된 모델 인스턴스의 데이터를 수정하는 방법에 대해서 알아보겠습니다. 다음은 특정 ‘Post’ 인스턴스의 제목을 수정하고 저장하는 예제입니다.

post = Post.objects.get(id=1)
post.title = '새로운 제목1'
post.save()
데이터 수정 에제

5. 데이터 삭제

데이터베이스에서 모델 인스턴스를 삭제하는 방법에 대해 알아보겠습니다. 아래 코드는 특정 ‘Post’ 인스턴스를 삭제하는 과정을 보여줍니다.

post = Post.objects.get(id=1)
post.delete()
데이터 삭제 예제


☞ 이 글을 통해 장고 ORM의 기본적인 사용법을 배우고, 데이터를 쉽게 조회, 저장, 수정 및 삭제하는 방법에 대해 알아보았습니다. 이러한 기능들은 장고 웹 애플리케이션 개발의 핵심이며, 다양한 데이터 작업에 적용될 수 있습니다.

☞ 관련 장고 공식 문서: Django Documentation on Models

관련 이전 게시글


이 글이 도움이 되셨다면 공유 부탁드립니다!

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤