Python Django

Django ORM(Object-Relational Mapping) 개념 및 사용법

PyExplorer 2025. 2. 27. 10:28
728x90

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을 잘 활용하면 보다 효율적인 웹 애플리케이션을 개발할 수 있으므로 실습을 통해 익혀보시길 바랍니다.

728x90