파이썬 장고 모델(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’ 인스턴스가 실제로 데이터베이스에 저장되며, 나중에 조회나 수정이 가능해집니다.
![모델 인스턴스 생성 및 저장 예시](https://bluesharehub.com/wp-content/uploads/2024/01/image-29-1024x237.png)
![모델 인스턴스 생성 및 저장 예시](https://bluesharehub.com/wp-content/uploads/2024/01/image-29-1024x237.png)
▼ 데이터베이스 저장 예시 화면
![데이터베이스 저장 예시 화면](https://bluesharehub.com/wp-content/uploads/2024/01/image-30.png)
![데이터베이스 저장 예시 화면](https://bluesharehub.com/wp-content/uploads/2024/01/image-30.png)
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’ 메소드는 매우 유연하며, 다양한 조회 조건을 적용할 수 있습니다. 예를 들어, 특정 필드의 값이 주어진 문자열을 포함하거나, 특정 범위의 날짜에 해당하는 객체를 필터링하는 등의 작업을 할 수 있습니다. 이 방법은 복잡한 데이터베이스 쿼리를 간단하고 직관적인 방식으로 수행할 수 있게 해줍니다.
![데이터베이스에서 데이터 조회 예시](https://bluesharehub.com/wp-content/uploads/2024/01/image-31.png)
![데이터베이스에서 데이터 조회 예시](https://bluesharehub.com/wp-content/uploads/2024/01/image-31.png)
4. 데이터 수정
이미 저장된 모델 인스턴스의 데이터를 수정하는 방법에 대해서 알아보겠습니다. 다음은 특정 ‘Post’ 인스턴스의 제목을 수정하고 저장하는 예제입니다.
post = Post.objects.get(id=1)
post.title = '새로운 제목1'
post.save()
![데이터 수정 에제](https://bluesharehub.com/wp-content/uploads/2024/01/image-32.png)
![데이터 수정 에제](https://bluesharehub.com/wp-content/uploads/2024/01/image-32.png)
5. 데이터 삭제
데이터베이스에서 모델 인스턴스를 삭제하는 방법에 대해 알아보겠습니다. 아래 코드는 특정 ‘Post’ 인스턴스를 삭제하는 과정을 보여줍니다.
post = Post.objects.get(id=1)
post.delete()
![데이터 삭제 예제](https://bluesharehub.com/wp-content/uploads/2024/01/image-33.png)
![데이터 삭제 예제](https://bluesharehub.com/wp-content/uploads/2024/01/image-33.png)
☞ 이 글을 통해 장고 ORM의 기본적인 사용법을 배우고, 데이터를 쉽게 조회, 저장, 수정 및 삭제하는 방법에 대해 알아보았습니다. 이러한 기능들은 장고 웹 애플리케이션 개발의 핵심이며, 다양한 데이터 작업에 적용될 수 있습니다.
☞ 관련 장고 공식 문서: Django Documentation on Models
관련 이전 게시글
- 파이썬 가상 환경에서 장고 설치하는 방법
- 파이썬 장고 프로젝트에서 한글과 서울 시간대 설정하는 방법
- 파이썬 장고 웹 앱 만들기: 주소(URL)와 화면(뷰) 연결하는 방법
- 파이썬 장고 모델(ORM): 데이터베이스 설계 및 구현 방법
이 글이 도움이 되셨다면 공유 부탁드립니다!