django #2 CRUD(2) - Model & ORM

Junyoung Kim·2022년 1월 11일
0

django

목록 보기
2/10

Django App의 구조는 크게 Model & ORM / View & URLconf로 나뉜다.

C.R.U.D Session 1에서는 Model & ORM에 대해 배웠다.

ORM이란?

ORM이란 Object Releational Mapping의 약자로, 객체지향형 프로그래밍 언어와 데이터베이스의 언어인 SQL문을 서로 변환하는 시스템이다. django는 객체지향형 프로그래밍 언어인 python의 package로, Django ORM이라는 ORM을 사용하고, 대표적인 다른 웹 프레임워크인 Node.js는 Sequelize라는 ORM을 사용한다.

ORM에 대해 더 알아보기 전에 실제 프로젝트의 앱 폴더 안의 models.py에 들어가보자.

위 models.py는 밑에서 리뷰할 Assignmnet의 모델의 일부다.
해당 파일을 확인해 보면, models.py에서는 class를 통해 모델을 생성하고, 객체 지향형 프로그래밍 언어에서 지원하는 클래스의 상속을 통해 django가 구현한 메서드를 내가 만든 모델에 상속해 모델을 구현하는 것을 알 수 있다.

다시 ORM으로 돌아오면, Database는 그것이 사용하는 언어, 예를 들면 SQL문을 통해서 데이터를 생성,수정,삭제,열람하는데, ORM을 사용하면 SQL문을 사용하지 않고도 수행할 수 있다.
가상 환경을 켜고 python manage.py shell을 통해 python shell을 들어간 뒤에, model을 import하고 django가 제공하는 각종 QuerySet API 메서드를 통해서 가능하다.
예를 들면 데이터 열람의 경우 ModelName.objects.get()이나 filter() 메서드를 통해서 가능하고, 수정과 삭제, 생성의 경우 update(),delete(),create() 메서드를 사용하면 된다.

이제부터 Assignment를 통해 django에서는 Model이 어떻게 작동하는지에 대해 알아보겠다.

먼저 models.py부터 살펴보자. ORM을 통한 데이터 생성에서는 관계형 데이터베이스의 기본 개념인 기본키(PK)나 외부키(FK), 일대일/일대다/다대다 관계를 전부 구현할 수 있다.
Assignment에 사용한 Datebase을 보면 데이터의 타입과 각 테이블의 관계가 나와 있는데, allergy 테이블과 drink 테이블은 allergy_drink라는 중간 테이블을 생성하여 서로 다대다(Many to Many) 관계임을 알 수 있다.

#...

class Drink(models.Model):
    korean_name     = models.CharField(max_length=45)
    english_name    = models.CharField(max_length=45)
    description     = models.TextField()
    category        = models.ForeignKey(Category, on_delete=models.CASCADE)

class Allergy(models.Model):
    name = models.CharField(max_length=45)

class Allergy_drink(models.Model):
    allergy = models.ForeignKey('Allergy',on_delete=models.CASCADE)
    drink   = models.ForeignKey('Drink',on_delete=models.CASCADE)
    
# ...

이처럼 외부키 설정과 중간테이블 설정 같은 것들을 전부 구현한 것을 알 수 있다.
models.py에서 모델이 완성되었으면 이제 Database에 연동시켜줘야 되는데 이것을 migration이라고 한다. 터미널을 실행시켜 manage.py이 있는 폴더로 이동 후에 다음 명령을 실행하면 된다.

python manage.py makemigration "AppName"
python manage.py migrate

models.py와 SQL의 Database를 성공적으로 연동했다면 다음은 shell를 통해 SQL이 아니라 python을 사용해 데이터의 CRUD를 실행해 보겠다.

먼저 shell을 작동하고 model의 class를 import 해준다. CRUD의 C부터 실습해 보겠다.

카테고리 모델객체(object)에서 create()라는 쿼리셋 명령어, 세부 내용으로는 '티'라는 이름과 menu의 1번 id를 참조하는 데이터를 성공적으로 생성했다.

Django QuerySet API 공식 문서의 create 부분을 캡쳐한 사진이다. 위의 내용과 동일한 것을 알 수 있다. 다음으로 넘어가 보자.


get()filter() 메서드를 통해서 데이터를 성공적으로 Read했다. get()은 queryset을 반환하지 않는 반면에, filter()는 반환한다는 차이점이 있다.


공식 문서의 해당 메서드에 관한 내용이다. 다음으로 넘어가자.

get()이나 filter()를 통해 반환받은 데이터를 update메서드를 통해서 수정하였다.

성공적으로 수정된 것을 확인할 수 있다. 마지막으로 넘어가자.

delete() 메서드를 통해서 id=6의 조건을 가진 데이터를 삭제하였고, 결과는 튜플의 형태로 반환받았다.

데이터가 성공적으로 삭제된 것을 확인할 수 있다.

QuerySet API에는 이외에도 수많은 메서드가 존재한다. 다음 포스트에서 다룰 View에서도 queryset api 메서드가 많이 사용되니 Shell을 통한 꾸준한 연습이 필요하겠다.

QuerySet API 공식 문서

0개의 댓글

관련 채용 정보