[Django] MySQL 연동

짱구석·2020년 10월 31일
0
post-thumbnail

시작하며

Django 는 기본 데이터베이스로 spllite3 를 가지고 있다.

이것을 mysql 로 변경하고 테이블이 생성이 되는 것을 확인해본다.

  • OS : Ubuntu 20.04.1 LTS

1. Django 준비

# 1. 가상환경 활성화
>>> conda activate testenv
# 2. 장고 설치
>>> pip install django
# 3. 장고 프로젝트 생성
>>> django-admin startproject "프로젝트이름"
# 4, 프로젝트 폴더로 이동 후 app 생성
>>> python manage.py startapp "앱이름"

어차피 한번 설정하면 새로운 프로젝트를 열때까지 두고 두고 쓰니까 장고 설치부터 표기하였다 가상환경에 장고가 이미 설치되어있으면 넘어가자.

2. mysqlclient 설치

>>> pip install mysqlclient

이때 다음과 같은 문제가 발생하였다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fc0e2e63-ead9-4cbc-87cd-6f19d2a02d64/Untitled.png

안된다.

이중 mysql_config not found 키워드를 가지고 stackoverflow 를 찾아갔다.

# 오버플로우 형님들께서 은총을 내려주셨다.
# 추가로 설치 하였다.
sudo apt-get install libmysqlclient-dev 

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b02e92a5-d5ea-4edf-ade9-171372df4ad1/Untitled.png

된다.

3. 데이터베이스 생성

# 1. mysql 접속
>>> mysql -u root -p
# 2. 데이터베이스 생성
mysql> create database "NAME" character set utf8mb4 collate utf8mb4_general_ci;
# 3. 데이터베이스 확인
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_db            |
| westarburks_menu   |
+--------------------+
6 rows in set (0.00 sec)
# 원하는 데이터베이스를 확인하면 성공!!

4. model.py 작성

# app 폴더의 models.py 예시
from django.db import models

class Menu(models.Model):
		name = models.CharField(max_length=20)

class Category(models.Model):
		name = models.CharField(max_length=20)
		menu = models.ForeignKey('Menu', on_delete=models.CASCADE)

class Product(models.Model):
		name  = models.CharField(max_length=100)
		price = models.IntegerField()
		menu = models.ForeignKey('Category', on_delete=models.CASCADE)

5. setting.py 작성

# project 폴더의 settings.py 예시
# 다음의 내용을 찾아서 아래와 같이 바꾸어주자
ALLOWED_HOSTS = ['*']

# Application definition

INSTALLED_APPS = [
#    'django.contrib.admin',
#    'django.contrib.auth',
    'django.contrib.contenttypes',
    'products.apps.ProductsConfig',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'westarburks_menu',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '3306'
    }
}

6. migration 하기

  • 장고 프로젝트 폴더에서 터미널 ON!
# 1. migrations 폴더 만들기
>>> python manage.py makemigration products
# 2. myspl과 migrate
>>> python manage.py migrate

7. 결과 확인

  • mysql shell에 접속해서 model.py에 넣은 menu, category, product 테이블이 잘들어갔는지 확인하자
# mysql 접속했다 치자!
mysql> use westarburks_menu;
# westarburks_menu: 내가 테이블을 넣을 데이터 베이스
mysql> show tables;
+----------------------------+
| Tables_in_westarburks_menu |
+----------------------------+
| django_content_type        |
| django_migrations          |
| django_session             |
| products_category          |
| products_menu              |
| products_product           |
+----------------------------+
6 rows in set (0.00 sec)
# 요렇게 나오면 연동이 잘되었다.

이제 테이블 변경시 → makemigration → migrate 의 반복만하면 된다.

0개의 댓글