작정하고 장고 14강 - Model, DB 연동 - makemigrations, migrate : Django로 Pinterest 따라하기!

IkSun·2023년 4월 4일

작정하고 장고

목록 보기
14/46

가장 오른쪽의 model 부분에 대한 설명을 이제 할것이다.

장고에서 모델이라는것은 데이터 베이스랑 장고 내부에서 사용이 편하도록 연동을 시켜주는 작업이다.
장고에서 모델을 가지고 이 데이터베이스와 통신을 하면서 db 의 내용을 자세히 알지 못해도 상관없다.

row, column 이 item(객체), Attribute(속성)으로 연결이 된다

Django 와 DB 연동

PycharmProjects/pragmatic/accountapp/models.py 에서 db 연결작업 한다.
그전에 터미널 창에서 입력해야할 명령어

python manage.py makemigrations

: models.py 에 쓰는 내용을 db 와 연동 시킬 파이썬 파일로 만들어주는 작업을 해준다.

# models.py
from django.db import models

# Create your models here.

class HelloWorld(models.Model):

class # 클래스가 하나가 db 에서의 어떤 item 하나가 되는 것 이다. 예시로 HelloWorld 라는 객체 생성하는데 models 의 Model 을 상속받아서 할것이다.
-> Command + b 를 통해서 클래스 Model 에 대한 소스코드를 확인해보자

Model 클래스는 원초적인 모델인데 이 모델을 상속받아서 원하는 추가적인 정보를 입력하여 새로운 클래스로 만들것이다.

# models.py
from django.db import models

# Create your models here.

class HelloWorld(models.Model):
    text = models.CharField(max_length=255, null=False)

models 안에 있는 charFiled 말그대로 문자열들을 포함하는 필드내 다음 파라미터 추가

1) max_length=255 로 설정해주고,
2) null=False 인데 여기서 null 의 의미는 공백을 의미한다.

  • db 에 정보를 저장할 떄 이 text 라는 Attribute 없어도 되는지에 대해서 설정을 해주는것이다.
  • 우리의 코드에서는 text 라는 Attribute 만 존재하므로 이 속성을 없애면 안되기 떄문에 null=False 로 설정 (true 는 해당 Attribute 가 없어도 된다는 의미)

이후에 위에서 말했던 다음 명령어를 입력하면 연결작업을 시작하게 된다.

python manage.py makemigrations

HelloWorld 라는 모델을 생성했다고 나오고, accountapp/migrations/0001_initial.py
파일을 만들었다고 나온다.

이렇게 한 다음에 자동으로 연동이 되는게 아니라 다음 추가적인 연동 명령어를 입력해주어야 한다.

python manage.py migrate  

migrate 명령어를 처음 입력하였기 떄문에 우리가 방금 하고자 했던 db 연동 작업 뿐만이 아니라 장고에서 제공해주는 기본 admin 기타 다른것들의 마이그레이션 db 연동 작업이 다음과같이 전부 정상적으로 수행되었음을 볼 수 있다.

데이터 베이스에 대한 정보는 settings.py 내부에서 다음과 같이 확인할 수 있다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

  • 위 코드는 즉 db.sqlite3 라는 이름으로 BASE_DIR 에 있다는 것을 의미한다.
  • 즉 db.sqlite3 라는 파일이 우리가 사용하고 있는 연동된 db 파일이다.
  • 엔진의 경우는 나중에 배포 시 db를 다른 것으로 바꿀 예정이지만 현재 개발에는 지금 엔진이 아무런 지장이 없으므로 그대로 진행.

커밋 완료.

profile
공부한 것 기록용

0개의 댓글