본문 바로가기
개발Study/web

database in django

by happy90 2020. 9. 13.
SMALL

나는 django와 mysql을 연동하여 사용하기 위해 mysql을 설치했다.

근데 django를 하나도 모르고 시작하는 상황에서는 기본으로 제공되는 sqlite를 공부하는게 나을것 같다는 생각이다.

 

내 프로젝트 hello_django/hello_django/settings.py에는 django의 설정을 모듈 변수로 설정한 페이지가 있다.

내용은 잘 모르겠지만 기본 db인 sqlite대신 다른것을 사용한다고 하면 이 설정값을 변경해야 하는 듯하다.

나는 일단 sqlite를 쓸 것이니 다른 설정은 pass한다.

 

python manage.py migrate

django에는 migration이라는 기능이 있다. 관련하여 migrate, migrations 등 명령어가 몇가지 있다.

모델을 변경시킨 내용을 저장하고, 히스토리 관리, 데이터베이스 적용 등에 사용된다고 한다.

이 중에서 migrate는 migration들을 실행시켜주고, 데이터베이스 스키마를 관리해준다고 한다.

migration은 따로 정리해야 할 듯하다.

 

model 만들기.

모델이란 부가적인 메타데이터를 가진 데이터베이스의 구조(layout)를 말합니다. 

무슨 번역체냐.

데이터베이스의 데이터들의 구조에 대해 정의한다고 이해하고 진행해본다.

 

mydjango app의 models.py를 열어보면 아래와 같이 기존에 정의되어있는 것이 보인다.

from django.db import models

# Create your models here.
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

아마도 django 튜토리얼 페이지에 있는 설문조사앱 관련 튜토리얼 코드들인 것으로 보인다.

모르니까 걍 따라해야겠다.

 

model Question 과 Choice가 구현되어 있다. model들은 각각 표를 나타낸다.

Choice는 field chice_text와 votese두개를 갖고 있고, 얘네들은 question과 관련있다. 

 

여기서 database 용어 field : 표에서 열(column)을 나타낸다.

행(row) = record

나는 db볼 때마다 이게 헷갈림 휴 ...

 

위 코드에서 choice_text는 models.CharField() 이렇게 되어있다.

database의 field 선언을 한 것이며 character자료형 field로 선언한 것이다. votes는 integer field.

Question의 question_text도 character, pub_date는 datetime을 나타내는 field.

그리고 이 field들은 각각 클래스 인스턴스가 된다.

 

Choice의 question은 ForeignKey field이다. 

database 용어 foreign key(외래키) : 

다른 테이블의 어떤 키에 대응하여 연결되는 key이다. 다른 테이블 Question에서 Choice에 접근할 때 이 외래키를 이용하여 접근할 수 있도록 설계한 것이다.

 

이렇게 구현해놓으면, django가 이 모델들에 대해 table을 생성할 수 있는 준비가 된다.

이 모델에 대한 table을 생성하기 위해 프로젝트에게 mydjango app이 설치되었다는 내용을 알려주어야 한다.

mydjango app의 apps.py에 MydjangoConfig가 구현되어 있고, 이를 hello_django프로젝트의 settings.py의 INSTALLED_APPS에 추가해주어야 한다.

아까 무시하고 지나갔던 hello_django의 settings.py를 다시 열어본다.

INSTALLED_APPS = [
    'mydjango.apps.MydjangoConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

맨윗줄에 추가해주었다.

이렇게 하고 아래 명령어를 내려준다.

python manage.py makemigrations mydjango

 

명령어 실행 결과 :

 

makemigrations 명령어는 내가 model에 뭔가 변경을 했고, 이 변경사항을 migration에 저장하겠다는 내용을 django에 알려준다.

python manage.py sqlmigrate mydjango 0001

위 명령어를 입력하면 django가 어떤 쿼리를 실행할지 보여준다.

 

아래 명령어를 실행하면 진짜로 실행된다.

python manage.py migrate

LIST

'개발Study > web' 카테고리의 다른 글

Python shell in django  (0) 2020.10.18
Django url? view? HTTP?  (0) 2020.10.18
MVC pattern  (0) 2020.09.20
django project  (0) 2020.09.09
django + apache + mysql 을 이용한 web server  (0) 2020.08.23

댓글