[python][자료구조] django sqlite3 MySQL로 전환하기

Django 프로젝트의 기본 데이터베이스는 sqlite3이다. 간단하게 로컬에서 혼자 사용하는 용도로써는 sqlite3도 충분하지만, 여러명이 같이 동시에 작업하는 환경에서는 부적합한 데이터베이스이다. 따라서 팀프로젝트와 같이 웹이 올려놓고 사용하기에는 sqlite3보다 서버 클라이언트 방식의 데이터베이스인 MySQL, PostgreSQL, Oracle 등이 더 적합하다. 여기선 Django 프로젝트의 기본 데이터베이스인 sqlite3를 MySQL로 전환시켜 보겠다.

1. MySQL 접속하기

우선 MySQL 설치 과정은 생략하고 MySQL root 사용자 로그인으로 들어가 데이터베이스 먼저 생성하도록 하겠다.

$ mysql -u root -p 
Enter password : [mysql root 사용자 비밀번호]

추가적으로 show databases 명령어를 사용하면 MySQL에서 생성한 데이터베이스의 목록을 확인할수 있다.

mysql> show databases;

2. 데이터베이스 생성하기

mysql> create database [db 이름] character set utf8mb4 collate utf8mb4_general_ci;
Query OK, 1 row affected (0.00 sec)

character set은 문자 집합, collate는 정렬을 뜻한다.

  • character set utf8mb4 : mysql에서 기존의 UTF-8 문자 집합을 3 byte의 가변 자료형으로 설계했다. 이후 이모티콘과 같은 4바이트 문자열을 저장하기 위해 가변 4바이트 UTF-8 문자열을 저장할수 있는 자료형을 추가했는데 이것이 바로 utf8mb4이다.

  • collate utf8mb4_general_ci : Collation은 텍스트 데이터를 정렬할때 사용한다. 저장된 텍스트 데이터를 정렬할 경우 어떻게 비교하여 정렬할 것인가를 정해준다. 같은 문자 집합이라도 영어의 경우 대소문자 비교 여부, 우리나라의 가나다라 순서와 일본의 히라가나, 카타카나의 구분 방법등이 달라진다.

3. mysqlclient 설치하기

Python과 MySQL 서버와 통신을 할 수 있게 해주는 데이터베이스 connector인 mysqlclient를 가상환경에 설치해준다.

$ pip install mysqlclient

4. my_settings.py 생성하기

우선 프로젝트 app의 settings.py에서 DATABASES의 값을 변경해줘야 한다

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

django의 프로젝트 app에서 바로 settings.py를 변경해줘도 되지만 설정값을 저장한 파일을 새로 만들어 settings.py에서 간접적으로 import해서 사용할 수 있다. manage.py가 위치한 디렉토리에서 my_settings.py를 생성해준다. 나중에 my_settings.py를 .gitignore에 반드시 추가해준다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

$ vim my_settings.py

settings.py의 DATABASE 부분을 그대로 복사해 다음과 같이 수정해준다.

my_settings.py

DATABASES = {
    'default': {
        'ENGINE'   : 'django.db.backends.mysql',
        'NAME'     : '[db 이름]'),
        'USER'     : 'root',
        'PASSWORD' : '[root 사용자 비밀번호]',
        'HOST'     : '[localHost 또는 127.0.0.1]',
        'OPTIONS'  : {'charset': 'utf8mb4'},
	'TEST': {
	'CHARSET'  : 'utf8mb4',
	'COLLATION': 'utf8_general_ci'
	}
    }
}	

참고를 필자는 우분투 유저이고 HOST 값을 localHost로 지정하고 db 서버를 돌렸을때 socket error가 났었다. localHost를 '127.0.0.1'로 변경해줬더니 오류가 해결됐다.

5. settings.py에서 my_settings.py를 import해 사용하기

프로젝트 app의 settings.py에 들어가 위에서 작성한 my_settings.py를 import 한다

settings.py

Generated by 'django-admin startproject' using Django 3.0.6.

For more information on this file, see
https://docs.djangoproject.com/en/3.0/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.0/ref/settings/
"""

import os
import my_settings # <------- 이부분!!!

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/

그리고 스크롤을 내리다보면 DATABASES 상수가 보인다. 수정해주자

# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases

DATABASES = my_settings.DATABASES

앞서 우리가 만들었던 파일은 my_settings.py의 DATABASES 정보가 그대로 들어간다. 이렇게 하고 my_settings.py를 .gitignore에 추가하면 간접적으로 my_settings.py의 설정값을 사용하고 있으므로 git repository에도 데이터베이스 설정값이 노출되지 않는 장점이 있다. 추가적으로 django에서 제공하는 SECRET_KEY도 위와 같은 방법으로 세팅해주면 된다.

6. python manage.py runserver

서버를 한번 돌려 미쳐 확인못한 오타들을 잡아준다. 이후 models를 설계하고 migrate한 뒤 mysql로 들어가 migration 여부를 확인해준다.

 

[출처] https://velog.io/@sungjun-jin/TIL-0505-django-sqlite3-MySQL%EB%A1%9C-%EC%A0%84%ED%99%98%ED%95%98%EA%B8%B0

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
17 [python 수학] FizzBuzz를 '개발자답게' 구현해보자 file 졸리운_곰 2024.12.26 317
16 [python 수학] matplot ylim How to set the axis limits y축 범위 고정 졸리운_곰 2024.06.08 434
15 [python 수학] [PYTHON] bar 그래프에 백분율 표시하기 file 졸리운_곰 2024.06.08 476
14 [python 수학] [Python] 막대 그래프 (Bar Chart) file 졸리운_곰 2024.06.08 357
13 [Python 수학] Plotting With PyQtGraph 졸리운_곰 2024.06.07 558
12 [Python 수학] 그래프 라이브러리 PyQtGraph 2D Graph 예제 코드 file 졸리운_곰 2024.06.06 498
11 [python 수학] [PYTHON] bar 그래프에 백분율 표시하기 file 졸리운_곰 2024.06.06 721
10 [python 수학] [Numpy] 넘파이 기본 문법 정리 졸리운_곰 2023.11.28 605
9 [python 수학] Numpy 많이쓰는 함수 정리 졸리운_곰 2023.11.28 533
8 [Python 수학] Python/데이터 사이언스 [파이썬] Numpy 정리 졸리운_곰 2023.11.28 428
7 [python][anaconda] 파이썬3(python3) 설치하고 환경(env) 관리하기 - 아나콘다3(anaconda3)를 활용한 설치 file 졸리운_곰 2022.01.20 358
6 [python][anaconda] 파이선 아나콘다 최신 버전 업데이트하기 file 졸리운_곰 2022.01.20 714
5 [python] 시험삼아 만들어본 로또 번호 생성기 졸리운_곰 2017.02.28 2214
4 Introduction to Python for Econometrics_Statistics and Data Analysis.pdf file 졸리운_곰 2016.06.07 2529
3 Numerical.Methods.in.Engineering.with.Python.2nd.Edition.Jaan.Kiusalaas.2010.pdf file 졸리운_곰 2016.06.07 2499
2 NumMethodPython.pdf file 졸리운_곰 2016.06.07 2419
1 Python-for-Computational-Science-and-Engineering.pdf file 졸리운_곰 2016.06.07 2316
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED