TIL

👀Today I Learn

용어정리

Model

  • 저장할 데이터에 대한 필드와 동작들을 포함한 데이터베이스 구조(layout)
  • Django는 Model을 이용해서 데이터를 조작
  • 일반적으로 하나의 Model은 하나의 데이터베이스 테이블을 의미

마이그레이션(Migration)

  • Python으로 Model 코드는 작성하여도 데이터베이스에는 반영이 안됨
  • Django는 마이그레이션(migration)을 만들고 이 단위로 데이터베이스에 변경사항을 반영


직접해보기

1. Model 생성

  • models.py
    • Article이라는 테이블을 생성하고 그 안에 title 컬럼을 생성
      from django.db import models
      
      class Article(models.Model):
          title = models.CharField(max_length=50)
      
      def __str__(self):
          return self.title
      

2. Magration 생성

  • 현재 모델의 변경사항을 마이그레이션으로 생성
  • 아래와 같이 python manage.py makemigrations <앱이름>을 써주면 독립적으로 저장
  • 여러개의 모델을 만들면 실수를 할 수도 있기 때문에 독립적으로 저장하는 습관을 기르는 것이 좋음
      python manage.py makemigrations articles
    
  • 생성 완료

    image

3. Magration 적용

  • 데이터베이스에 반영되지 않은 마이그레이션을 반영
  • Magration을 생성할때와 마찬가지로 앱이름을 써서 반영
      python manage.py migrate articles
    
  • 적용 완료

    image

  • 적용이 완료되고나면 articles 앱에 magrations 폴더 속에 파일이 생성됨

    image

  • SQL에도 앱이름_클래스명형태로 테이블이 생성됨

    image

  • 데이터를 넣고 확인해보면 아래와 같이 컬럼이 생성된 것을 확인 가능

    image

4. Magration 추가

  • 새로운 컬럼을 추가해보자!
  • content라는 컬럼을 추가하기 위한 코드
      from django.db import models
    
      class Article(models.Model):
          title = models.CharField(max_length=50)
          content = models.TextField()
            
          def __str__(self):
              return self.title
    
  • 아까와 동일하게 Migration을 생성하면 다음과 같이 기존에 생성한 데이터는 어떻게 할것이냐는 메세지가 뜸!
    • 일단 값 하나를 넣고 추후에 수정하면 되므로 1번을 선택하여 진행

      image

  • 그다음 migrtion을 저장해주면 아래와 같이 migrations 파일에 새로운 파일이 생김

    image

  • SQL에 들어가서 테이블을 확인해보면 content 컬럼이 생긴 것을 확인 가능

    image


5. Magration 삭제

  • 아래와 같이 created_atupdated_at을 생성하고 magration을 생성하고 적용했다고 가정해보자.
      from django.db import models
    
      class Article(models.Model):
          title = models.CharField(max_length=50)
          content = models.TextField()
          created_at = models.DateTimeField(auto_now_add=True)
          updated_at = models.DateTimeField(auto_now=True)
            
          def __str__(self):
              return self.title
    
  • SQL문을 보면 아래와 같이 4개의 컬럼이 있는 것이 확인 가능

    image

  • created_atupdated_at이 필요없을 때는 어떻게 해야할까?🤔 : 마이그레이션을 이전으로 돌리면 됨
  • 일단 마이그레이션 목록과 적용여부를 확인하기 위해 아래의 명령을 사용
      python manage.py showmigration
    
    • 아래와 같이 0001 ~ 0003의 마이그레이션이 생성되고 적용([x])되어 있는 것을 확인

      image

    • 0003을 취소해야하므로 0002로 migrate 명령어를 사용

      python manage.py migrate articles 0002
      
      • 다시 목록을 확인해보면 적용이 취소된 것을 볼 수 있음

        image

      • SQL 테이블에서도 해당 컬럼이 사라짐

        image



💡Today I Thought

오늘의 체크리스트

  • 알고리즘 코드카타 101-110
  • SQL 코드카타 62
  • 백준 코딩테스트 1문제
  • 장고 강의 20강까지
  • 스탠다드반 과제
  • TIL 작성

회고

  어제 학습반에서 했던 내용을 복습겸 숙제 제출겸 작성! 강의도 빨리 들어야하는데, 진도가 여전히 안나가는.. 내일은 다 듣고 이번주에 제대로 복습해야겠다.

댓글남기기