Django #03 DB 테이블 관계 및 CRUD 기초

만두다섯개·2023년 11월 6일

Django 기초 학습

목록 보기
3/3

들어가기 앞서...

-본문은 DB 테이블 관계와 CRUD를 함께 정리했다. 따라서 본문을 이해하기 위해서는 두 키워드를 개별적으로 이해하기 보다 두 내용을 함께 탐색하는 것이 처음 이해하기에 더 적합하다고 본다.

보완이 필요한 내용

  • Django CRUD의 테이블 객체 사용
  1. 객체가 지원하는 다양한 메소드 사용방법(objects.add, objects.filter, 등)

DB 테이블의 관계 Relationship

(책 리뷰 목적의 앱 생성한다. 앱에서는 여러 책들, 여러 출발사와, 기여자들의 DB 테이블 존재한다.)
앱 이름 : reviews
테이블 종류 : Book, Publisher

  • models.py 에 추가한 클래스들을 웹 페이지상에서 보기 위해서 admin.py 에 명시한다

1:N 관계

  • 테이블의 여러 레코드에서 다른 테이블의 레코드를 참조하는 것을 1:N 관계라고 한다.
  • 해당 관계에서 외래 키를 사용(foregin key)으로 다른 레코드를 참조한다.
  • 예시) (현실세계)한 책을 어떤 출판사가 출간할 때, 해당 책에는 출간해준 출판사가 들어가야 한다.
    (DB에서) Book 이라는 레코드에서 Publisher 레코드를 참조한다.
    (코드에서) ForeginKey 로 해당 레코드 참조.

  • 외래키(ForeginKey)사용 시에는 null 값을 지정해주는 것이 좋다.
    어떤 상황에서 지정해주는 것이 좋을까?
    기존의 책 레코드는 출판사와의 관계가 없이 생성되어있었다.
    그런데 책 레코드에 출판사와의 관계를 지정하고 적용하려고 마이그래이션 생성 및 적용시, 기존의 레코드에는 출판사와의 관계가 없기 때문에 아래 그림처럼 해당 값을 지정할건지, 아니면 소스를 수정할건지 물어본다.

위 상황에서는 null값을 True 로 주면 위 질의가 나오지 않는다.

N:M 관계

  • 2권의 책을 서로 다른 기여자들이 기여할 수 있다.
  • A라는 기여자가 BOOK1, BOOK2를 만드는데 기여할 수 있고, B라는 사람도 BOOK1,BOOK2,BOOK3를 만드는데 기여 가능하다
  • 이를 N:M 관계라고 한다.

  • N:M 관계를 지정해주기 위해 참조되는 클래스인 Book 클래스에 참조하는 클래스를 ManyToManyField로 선언해준다.
    contributors = models.ManyToManyField('Contributor', through='BookContributor')
    through : N:M 옵션으로 중개 테이블을 통해 관계를 설정한다는 의미이다.
  • 중개 테이블은 BookContributor 사용하며 해당 중계테이블에서 Contributor를 외래키로 사용한다
  • 만약 N:M(다대다) 관계를 설정하면서 trough 옵션을 사용하지 않는다면 중계테이블 자동 생성된다

1: 1관계

  • 기여자에게 필요한 자격증이 존재한다. (1:1 관계)

  • OneToOneField 로 1대1관계를 정의해준다
  • 웹 페이지에서 확인하면, 자격증 테이블에서는 기여자를 선택해 자격증 데이터를 생성 가능하다. 반대로 기여자 테이블에서는 자격증을 선택해 데이터를 생성 불가능하다.

DB 사용자를 선택 가능한 테이블 데이터 옵션으로 테이블 생성하기

-(조건) from django.contrib import auth #선언 필요

  • auth.get_user_model() 은 DB 사용자를 선택옵션으로 정의한다.

Django ORM의 CRUD

  • CRUD 란? [Create 생성] / [Read, Retrieve 읽기,인출] / [Update 갱신] /[ Delete, Destroy 삭제, 파괴] 으로, SW 가지는 기본적 데이터 처리 기능을 의미한다.
  • Django ORM은 SQL을 사용하지 않아도 동일한 기능을 제공한다
  • 작업 수행 공간은 파이썬 터미널을 통해 작업을 수행한다.
  • 작업 수행공간으로 진입 방법
    1. 파이참 터미널에서 python manage.py shell 입력
    2. 파이참 좌측 하단 파이썬 아이콘으로 파이썬 터미널 사용

CRUD – Create

  • 테이블의 데이터를 객체를 이용해 추가한다.

CRUD – Update

  • 추가한 데이터를 수정한다

CRUD – Create() 메소드 이용

CRUD – 외래 키로 객체 생성

  • Book 객체, create()메소드, publisher객체로 Book 데이터 추가
  • Book 테이블 데이터 추가시 필요한 외래 키를 publisher 객체로 받아 사용한다.

CRUD – 외래 키로 객체 생성

  • N:M 관계에 있는 BookContributor에 데이터 추가한다
  • BookContributor는 Book, Contributor 데이터로 만들어야 한다.

CRUD – add() 메소드로 N:M 관계

  • Book, Contributor 클래스로부터 한 데이터씩 가져와 객체에 넣은 후, 해당 객체들과 add메소드로 BookContributor 데이터 생성하기

CRUD – read

  • publisher 클래스의 데이터를 read 하기 위해서는 여러 가지 방법 존재

-

  1. get 메소드 사용
  • 하나의 객체만 반환한다

  1. 여러 객체 조회 – filter 사용

  1. all() 메소드 사용 집합 검색

Update() 메소드 사용한 기존 레코드 업데이트

  • lastname이 김민초인 레코드의 first_name을 초코나무숲으로 변경

Delete() 메소드 사용한 기존 레코드 삭제

  • lastname이 김민초인 레코드 삭제

profile
磨斧爲針

0개의 댓글