본문 바로가기
Web Backend/Django

[Django] Django 학습 정리 - Django ORM

by 요호유후 2025. 3. 29.
반응형

지금까지 Django 학습한 내용을 바탕으로 정리를 해보려 한다.

 

목차
1. Django ORM 이란?
2. Django ORM 특징
3. Django ORM 문법들
[작업 환경]
MacOS, PyCharm
pyenv, poetry
Python, Django

 

 

1. Django ORM 이란?
ORM (Object-Relational Mapping)

- DB 데이터 조작을 위해서는 SQL문이 필요하다.
- Django에서는 SQL문법 대신 파이썬문법? 을 이용하여 DB 데이터를 조작할 수 있다.
- 이러한 기술을 ORM 이라고 한다.

 

    📌 SQL문과 ORM 코드 비교

# SQL
SELECT * FROM user WHERE age >= 20 ORDER BY name;

# Django ORM
User.objects.filter(age__gt=20).order_by('name')

 

 

2. Django ORM 특징
특징 설명
SQL문법 몰라도 됨 파이썬 문법으로 DB 조작 가능
(파이썬 문법을 알아야 하긴 하지만, ⭐️ IDE에 따라 자동완성 해줌 ⭐️)
다양한 DB 지원 함 다양한 DB(Mysql, PostgreSQL, SQLite 등)에 코드변경 없이 작동 가능
모델 기반 DB 테이블을 models.py의 클래스로 정의

 

 

3. Django ORM 문법들
Django ORM 문법 기능 SQL 문법
User.objects.all() 모든 데이터 조회 SELECT * FROM user;
User.objects.filter(age__gt=20) 필터링(조건 조회) SELECT * FROM user
WHERE age>20;
User.objects.get(id=1) 특정 조건 조회 SELECT * FROM user
WHERE id=1;
User.objects.order_by('-age') 값 정렬 SELECT * FROM user
ORDER BY age DESC;
User.objects.create(name='Tom') 값 생성 INSERT INTO user (name)
VALUES ("Tom");
User.objects.get(id=1).delete() 특정값 삭제 DELETE FROM user
WHERE id=1;
User.objects.count()
카운트 SELECT COUNT(*)
FROM user;

 

    📌 사용예시)

def blog_list(request):
    blogs = Blog.objects.all().order_by('-created_at')
    

class BlogListView(ListView):
    # model = Blog => Blog.objects.all() 과 같음 // order_by() 등 함수사용 시 아래와 같이 작성
    # queryset = Blog.objects.all().order_by('-created_at') # 혹은 ordering 변수로 선언할 수 있음
    queryset = Blog.objects.all()
    
    
def search(request):
    search_type = request.GET.get('type')  # user, tag
    q = request.GET.get('q', '')

    if search_type in ['user', 'tag'] and q:
        if search_type == 'user':
            object_list = User.objects.filter(nickname__icontains=q)
        else:
            object_list = Post.objects.filter(tags__tag=q)

 

 

 

반응형

댓글