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/migrations
에0001_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/migrations
에0002_auto~.py
가 생성되는 것을 확인해본다.- 이 경우에는, default 설정을 auto로 돌렸기 때문에 dependencies라는 부분이 추가로 생성된다.

Uploaded by N2T