티스토리 뷰

Django

[Django] 6. Django Model

개발자 뭄뭄 2022. 9. 2. 17:38
반응형

1. Database


  • 체계화된 데이터의 모임
  • 검색 및 구조화 같은 작업을 보다 쉽게 하기 위해 조직화된 데이터를 수집하는 저장 시스템
  • 스키마(Schema) : 뼈대, 데이터베이스에서 자료의 구조, 표현방법, 관계 등을 정의한 구조
    • column : 데이터의 이름
    • datatype : ex) int, text …
  • 테이블(table)
    • 필드(field) : 열(column), data의 type, 속성
    • 레코드(record) : 행(row), 실제 data의 작성
    • cf) id == PK(primary key) ⇒기술적으로 다른 항목과 절대로 중복될 수 없는 단일 값
      • 예를 들어 주민등록번호처럼 다른 특성은 같은 사람이 존재할 수 있지만, 주민등록번호는 같을 수 없다! ⇒ 그 사람을 나타내는 고유한 값으로 사용 가능하다.
  • 쿼리(Query) : 데이터를 조회하기 위한 명령어
    • ex) “Query를 날린다” == 데이터베이스를 조작한다.

2. Model


  • 지금까지는 ‘Views’나 ‘Templates’ 를 다뤘다. MTV 중에 TV만 다뤘던 셈! 이제는 Model을 다뤄본다.
  • Django는 Model을 통해서 데이터에 접속하고 관리한다.
  • 일반적으로 각각의 모델은 하나의 데이터베이스 테이블에 매핑(mapping)
    • 모델 클래스 1개 == 데이터베이스 테이블 1개
    • cf) mapping : 하나의 값을 다른 값으로 대응시키는 것
      # articles/models.py
      
      # 각 모델은 django.models.Model의 서브클래스이다
      # models 모듈의 Model 클래스를 상속받아서 구성된다.
      class Article(model.Model):
      	# 글자의 제한을 주고 싶을때에는 CharField를 사용한다.
      	# CharField 사용시에는 반드시 max_length를 제한해야한다.
      	# max_length < 255
      	# 실제로 저장될 때는 길이의 유효성을 검사하지 않는다.
      	title = models.CharField(max_length=10)
      	content = models.TextField()
      
      	# title, content : 클래스 변수(속성)명, DB필드의 이름
      	# models~ : DB필드의 데이터 타입 (쟝고 공식문서를 참고한다.)

  • extensions에서 sqlite를 검색해서 실행한다.
    $ python manage.py makemigrations
    $ python manage.py migrate
    • 첫번째 명령어를 실행하면,
      Migrations for 'articles':
        articles\migrations\0001_initial.py
          - Create model Article

      articles/migrations0001_initial.py가 생성되는 것을 확인해본다.

    • 두번째 명령어를 실행하면, 여러가지 민트색 OK 들이 나온다. ⇒ 내가 만든 app 뿐만 아니라 쟝고의 기본 app들에대해서도 migrate 되기 때문에, 맨 처음 migrate를 하면 길게 나오는 것이 정상이다!
    • 좌측 하단의 sqlite explorer를 눌러보면 테이블이 나온다.

  • $python manage.py showmigrations migrations 파일들이 migrate 됐는지 여부를 확인할 수 있다. ⇒ [X] 표시가 있으면 완료되었음을 의미
  • $python manage.py sqlmigrate articles 0001 해당 migration 파일이 SQL문 (DB에서 사용하는 언어)으로 어떻게 해석 될 지 미리 확인할 수 있다.

  • 추가 필드 정의
    • models.py 에 다음과 같은 변경사항을 만들고, makemigrations 진행
    # articles/models.py
    from django.db import models
    
    # Create your models here.
    class Article(models.Model):
        title = models.CharField(max_length=10)
        content = models.TextField()
    		# 아래 2개를 새로 만든다.
        created_at = models.DateTimeField(auto_now_add=True)
        updated_at = models.DateTimeField(auto_now=True)
    $ python manage.py makemigrations
    You are trying to add the field 'created_at' with 'auto_now_add=True' to article without a default; the database needs something to populate existing rows.
    
     1) Provide a one-off default now (will be set on all existing rows)
     2) Quit, and let me add a default in models.py
    Select an option:
    💡
    데이터베이스에 빈칸(Null)이 있을 수 없다!! 기본값(default)을 어떻게 할래? 하고 물어보고 있는 것이다.

    1) 지금 기본 값을 넣어래? 2) 지금 대화를 종료하고 네가 models에 추가할래? 1) 을 선택해보면, “어, 혹시 이 값으로 넣을래?” 하고 알려준다. 그냥 ‘enter’를 누르면 자동으로 들어가진다.

    articles/migrations0002_auto~.py가 생성되는 것을 확인해본다.

    • 이 경우에는, default 설정을 auto로 돌렸기 때문에 dependencies라는 부분이 추가로 생성된다.


Uploaded by N2T

반응형

'Django' 카테고리의 다른 글

[Django] 8. QuerySet API  (1) 2022.09.02
[Django] 7. Django URLs  (1) 2022.09.02
[Django] 5. Sending and Retrieving form data  (0) 2022.09.02
[Django] 4. Django Template  (0) 2022.09.02
[Django] 3. Start Django Project  (0) 2022.09.02
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함