반응형
지금까지 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)
반응형
'Web Backend > Django' 카테고리의 다른 글
[Django] Django 학습 정리 - CBV (Class Based View) (0) | 2025.03.30 |
---|---|
[Django] Django 학습 정리 - Django Auth (0) | 2025.03.30 |
[Django] Django 학습 정리 - Django Form (0) | 2025.03.29 |
[Django] Django 학습 정리 - FBV(Function Based View)와 URL (0) | 2025.03.29 |
[Django] Django 학습 정리 - 템플릿 문법 정리 (Jinja, extends, block) (0) | 2025.03.29 |
댓글