ORM(Object-Relational-Mapping)
쉽게 말하면 파이썬으로 데이터베이스를 조작할 수 있게 해준다는 것이고
면접식으로 말하면 객체 지향 언어에서는 클래스를 이용한 객체로 데이터와 기능을 캡슐화해서 다루고 데이터베이스는 테이블과 행으로 데이터를 저장하고 관리하는데 이 두가지 사이의 개념적인 간극을 줄인것이다.
ORM은 Django에만 있는것이 아니라 여러 가지가 존재한다.(궁금하면 구글링)
ORM의 장단점
장점
- SQL을 잘 알지못해도 DB 조작이 가능하다
- SQL을 알아도 기존의 복잡한 쿼리문 작성없이 객체 지향적인 접근이 가능하다.
- SQL을 잘사용하지 못한다면 ORM이 변환해주는 것이 더 빠르다.
- 이 모든것이 생산성이 좋다는 것이다.
단점
- ORM에서 지원하지 않는 쿼리라면 직접 작성해야한다.
- 서비스가 커질수록 ORM만으로는 한계가 있을 수 있다.
- 매우 효율적인 SQL을 작성하고 싶다면 ORM이 불편할 수 있다.
Database API
우리가 모델 클래스를 생성하면 Django는 자동적으로 CRUD 할 수 있는 Database API를 제공한다.
Django ORM으로 Database API를 사용해서 데이터베이스를 조작하는 과정에서 우리가 작성한 모델 클래스를 이용하여 데이터 베이스 쿼리작업을 도와주는 Manager를 얻게 되는데 이 Manager의 기본 이름은 objects다.
우리는 앞으로 Manager를 이용해서 Django ORM의 Queryset API를 사용하게 될 것이다.
※ Queryset == ORM을 사용해서 데이터베이스로부터 전달받은 객체
기본 형태 : MyModel.objects.all()
Django shell
Django가 제공하는 여러가지 기능을 명령어로 입력해서 실행해볼 수 있는 Shell 환경이다.
하지만 Django가 기본적으로 제공하는 shell 환경은 사용하기 너무 불편한 점이 있어서
pip install django-extensions
을 설치하면 Django 기본 Shell보다 더 많은 기능이 있는 shell_plus를 제공받을 수 있다.
그리고 나서 INSTALLED_APPS에 "django_extensions", 을 추가해주면 된다.
pip install ipython
ipython은 python 기본 Shell에 여러가지 기능을 더한것으로 자동완성, 코드 색상 강조와 같은 기능을 제공한다.
같이 깔면 훨씬 편해지니까 같이 설치해주도록 하자. pip freeze > requirements.txt 도 잊지 말자.
CRUD
우리가 사용하는 서비스의 대부분이 CRUD로 이루어져 있는데, CRUD는 Create, Read, Update, Delete의 약자로
게시글을 작성하고(Create) 조회하고(Read) 수정하고(Update) 삭제하는(Delete) 대부분의 소프트웨어가 하는일을 말한다.
# Article 생성 방법 1
article = Article()
article.title = 'first_title'
article.content = 'my_content'
article.save()
# Article 생성 방법 2
article = Article(title='second_title', content='my_content')
article.save()
# Article 생성 방법 3(save()가 필요하지 않음)
Article.objects.create(title='third title', content='마지막 방법임')
# 모든 Article 조회
Article.objects.all()
# 하나의 Article 조회(아이디가 1인)
Article.objects.get(id=1)
# 조건에 맞는 Article 조회('my_content'가 포함된)
Article.objects.filter(content='my_content')
# Article 수정하기
article = Article.objects.get(id=1)
article.title = 'updated title'
article.save()
# Article 삭제하기
article = Article.objects.get(id=2)
article.delete()
'웹 개발' 카테고리의 다른 글
[Django] CRUD 구현하기 - 2(RUD부분) (0) | 2024.08.26 |
---|---|
[Django] CRUD 구현하기 - 1(CR부분) (0) | 2024.08.23 |
[Django] Django Model (0) | 2024.08.21 |
[웹 개발] 프론트엔드의 기능과 구조 이해 (0) | 2024.08.21 |
[Django] 다중 앱을 위한 URL 분리 (0) | 2024.08.20 |