Django ORM(Object-Relational Mapping) 개념 및 사용법
1. ORM(Object-Relational Mapping)이란?
Django에서는 ORM(Object-Relational Mapping)을 제공하여 데이터베이스와 Python 코드 간의 상호작용을 쉽게 할 수 있습니다. ORM이란 데이터베이스의 테이블을 Python의 클래스 형태로 추상화하여 사용할 수 있도록 하는 기술입니다. 이를 통해 SQL을 직접 작성하지 않고도 데이터베이스 작업을 수행할 수 있습니다.
1.1 ORM의 장점
- 코드의 일관성 유지: SQL 쿼리를 직접 작성하지 않아도 되므로 코드가 보다 Pythonic하게 유지됩니다.
- 데이터베이스 독립성: ORM을 사용하면 데이터베이스 종류(MySQL, PostgreSQL, SQLite 등)에 구애받지 않고 동일한 코드로 작업할 수 있습니다.
- 보안 강화: SQL Injection과 같은 보안 문제를 자동으로 방지할 수 있습니다.
- 유지보수 편리성: 데이터 모델 변경이 쉬워지며, 코드의 가독성이 향상됩니다.
2. Django에서 ORM 사용법
Django에서 ORM을 사용하려면 모델(Model)을 정의하고 이를 기반으로 데이터베이스에서 데이터를 조회, 삽입, 수정, 삭제할 수 있습니다.
2.1 모델(Model) 생성
Django에서는 models.py
파일을 통해 데이터 모델을 정의할 수 있습니다. 아래는 Blog
모델을 정의하는 예제입니다.
from django.db import models
class Blog(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
주요 필드 설명
CharField(max_length=200)
: 최대 200자의 문자열을 저장하는 필드TextField()
: 길이 제한이 없는 텍스트 필드DateTimeField(auto_now_add=True)
: 객체가 생성될 때 자동으로 현재 시간이 저장됨DateTimeField(auto_now=True)
: 객체가 수정될 때마다 자동으로 현재 시간이 갱신됨
2.2 마이그레이션(Migrations) 수행
모델을 정의한 후 이를 데이터베이스에 반영하기 위해 마이그레이션을 수행해야 합니다.
python manage.py makemigrations
python manage.py migrate
3. Django ORM을 이용한 데이터 조작
3.1 데이터 생성(Create)
Django ORM을 사용하여 새로운 데이터를 삽입할 수 있습니다.
# 새로운 Blog 객체 생성
blog = Blog(title='Django ORM 소개', content='Django ORM을 활용한 데이터베이스 조작 방법')
blog.save()
또는 create()
메서드를 이용하면 한 줄로 데이터를 생성할 수도 있습니다.
Blog.objects.create(title='Django 모델', content='Django에서 모델을 정의하는 방법')
3.2 데이터 조회(Read)
전체 데이터 조회
blogs = Blog.objects.all()
for blog in blogs:
print(blog.title)
특정 조건으로 데이터 조회
blog = Blog.objects.get(id=1) # id가 1인 객체 조회
print(blog.title)
filter()
를 사용하여 여러 개의 데이터를 조회할 수도 있습니다.
blogs = Blog.objects.filter(title__contains='Django') # 제목에 'Django'가 포함된 객체 조회
3.3 데이터 수정(Update)
blog = Blog.objects.get(id=1)
blog.title = 'Django ORM 개념'
blog.save()
3.4 데이터 삭제(Delete)
blog = Blog.objects.get(id=1)
blog.delete()
4. Django ORM의 다양한 기능
4.1 정렬
blogs = Blog.objects.order_by('-created_at') # 생성일을 기준으로 내림차순 정렬
4.2 개수 세기
count = Blog.objects.count()
4.3 특정 필드만 가져오기
titles = Blog.objects.values_list('title', flat=True)
5. Django ORM과 Raw SQL
Django ORM을 사용하면 SQL을 직접 작성하지 않아도 되지만, 복잡한 쿼리가 필요한 경우 raw()
메서드를 이용하여 SQL을 직접 실행할 수 있습니다.
blogs = Blog.objects.raw('SELECT * FROM myapp_blog WHERE title LIKE "Django%"')
for blog in blogs:
print(blog.title)
6. 결론
Django ORM을 활용하면 데이터베이스와 쉽게 연동할 수 있으며, 복잡한 SQL 없이도 데이터를 조작할 수 있습니다. 이번 글에서는 Django ORM의 개념과 기본적인 사용법에 대해 살펴보았습니다. ORM을 잘 활용하면 보다 효율적인 웹 애플리케이션을 개발할 수 있으므로 실습을 통해 익혀보시길 바랍니다.
'Python Django' 카테고리의 다른 글
Django 모델(Model) 정의 및 마이그레이션 이해하기 (0) | 2025.03.01 |
---|---|
Django에서 데이터베이스 설정하기 (settings.py에서 DATABASES 설정) (0) | 2025.02.28 |
Django Template 엔진 활용법 (0) | 2025.02.26 |
Django의 View와 HttpResponse 기본 사용법 (0) | 2025.02.25 |
Django의 URL 라우팅 (urls.py 설정) (0) | 2025.02.24 |