개미의 개열시미 프로그래밍

[django] 2. Mysql 연동과 테이블 생성 + 모델 만들기 본문

WEB/django

[django] 2. Mysql 연동과 테이블 생성 + 모델 만들기

YunHyeok 2021. 7. 3. 00:57
728x90
반응형

장고의 개발 환경이 준비되었다면 이제 데이터베이스를 연동할 순서다.

장고를 설치하면 sqlite3이 자동으로 연동이 되지만 이번 프로젝트에서는 MySQL을 연동하는 작업을 한다.

 

Mysql 연동과 테이블 생성


$ (venv) install mysqlclient

- 가상 환경 진입 후 mysqlclient설치 

 

 

현재 MySQL에 데이터베이스가 없는 상태이다. MySQL Workbench에서 DB를 만들고 사용자 생성하는 부분은 아래의 링크를 참조했다.

https://diaryofgreen.tistory.com/132

 

Mysql :: Mysql workbench에서 DB 생성 + 사용자 생성 + 연동하기

1. DB 생성 mysql workbench에 들어가 관리자인 root로 접속 (관리자인 root 계정을 생성해놓은 상태라고 가정한다) 상단의 DB 생성 버튼을 누르고 DB 이름을 설정 > Collaction 설정 > Apply 클릭 (Collaction..

diaryofgreen.tistory.com

 

[MySQL Workbench]

- 이렇게 사용자 생성과 DB 생성까지 마친다. DB도 터미널에서 가능하지만 편의상 workbench에서 만들었다.

 

 

github을 통해 관리를 하고 있다면 최상위 디렉터리에 my_settings.py라는 파일을 생성하고, 유저명과 패스워드와 같은 정보를 보호하기 위해 gitignore에 넣어준다. 

그리고 my_settings.py 에 아래와 데이터베이스 설정을 만든다.

# django_rest/my_settings.py

DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'store', # db이름
        'USER': 'user_name', # 로그인-유저 명
        'PASSWORD': 'password',# 로그인- 비밀번호
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

 

다음은 mysite/settings.py에서 기존 sqlite3를 적용한 데이터 베이스 부분을 my_settings.py를 임포트 해서 변경한다.

# mysite/settings.py

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

위 부분을 아래의 코드로 바꿔주기만 하면 된다.

# mystie/settings.py

import my_settings

DATABASES = my_settings.DATABASES

 

이제 아래의 migrate를 실행하여 데이터베이스에 테이블을 만들어보려한다.

- 현재 테이블엔 아무것도 없는 상태이다.

 

$ (venv) python manage.py makemigrations
$ (venv) python manage.py migrate

- migrate명령어를 통해 테이블을 만들어준다.

 

- 테이블이 생성된 것을 알 수 있다.

 

모델 만들기


# api/models.py

from django.db import models
from django.conf import settings
from django.utils import timezone


class Item_Info(models.Model):
    id = models.CharField(max_length=200,null=False, primary_key=True)
    category_L = models.IntegerField()
    name = models.CharField(max_length=200)
    value = models.IntegerField()
    price = models.IntegerField()


    def __str__(self):
        return self.name

- 모델은 위처럼 id, category_L, name, value, price 속성을 추가했다.

 

$ python manage.py makemigrations api
$ python manage.py migarate

- 위 명령어로 모델이 생성된 것을 반영한다.

 

- 위에 models.py에서 설정한 속성들을 포함한 테이블이 생성된 것을 알 수 있다.

 

* 모델을 자주 바꾸고 생성하는 연습을 하던 중 'python manage.py migrate'가 안 먹히는 에러가 떴었는데 아래 블로그를 참고해서 문제를 해결했다.

https://velog.io/@haileeyu21/Error-dJango-migrate-%ED%96%88%EB%8A%94%EB%8D%B0-No-migrations-to-apply-%EC%9D%BC-%EA%B2%BD%EC%9A%B0

 

[Error] dJango - migrate 했는데 'No migrations to apply' 일 경우!

한창 신나게 dJango shell로 데이터를 집어넣으면서 과제 진행중이었는데 충격적이게도 마지막 AllergyDrink테이블의 drinks컬럼이 생성되지 않은 상황!차분하게 migrations 디렉토리 내 migration 파일을 삭

velog.io

 

이제 생성된 테이블에 값을 넣어보려 한다. 값을 넣어주는 방법에는 workbench를 쓰거나 쉘을 열어 ORM을 쓰거나 터미널에서 MySQL을 여는 방법이 있다.

 

$ (venv) winpty mysql -u 사용자명 -p

- 만약 git bash 터미널에서 MySQL을 열고 싶다면 앞에 winpty를 붙여주자

- '사용자명' 에는 root가 아닌 생성했던 사용자를 넣도록 한다. 

 

 

학교에서 했던 Workbench나 터미널에서 하는 방법 말고 쉘을 열어 ORM을 활용해서 속성들에 값을 넣어주는 것을 해보았다.

$ (venv) python manage.py shell

- 우선 쉘을 연다.

 

>>> from api.models import Item_Info
>>> q = Item_Info(id="1", category_L="0", name="coke", value="120", price="1100")
>>> q.save()

- 모델을 임포트하고 속성에 맞는 타입으로 값을 넣어준 뒤 save 해주면 저장이 된 것을 확인할 수 있다.

 

 

* 조회 및 수정은 아래 위키 독스 '점프 투 장고'를 참고하면 된다.

https://wikidocs.net/70650#1_2

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

참고 사이트


- https://uni2237.tistory.com/73?category=830394 

- https://velog.io/@devmin/Django-MySQL-Connect

- https://jamanbbo.tistory.com/28

728x90
반응형
Comments