[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

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
67 [Python] 문자열에서 파일명 또는 폴더명으로 시스템상 지원되는 글자를 제외하고 삭제하기 졸리운_곰 2023.06.04 1014
66 [python 일반] 파이썬 win32com 사용시 에러 해결 file 졸리운_곰 2023.06.04 509
65 [python 일반] win32com.gen_py 라이브러리의 오류 해결 졸리운_곰 2023.06.03 371
64 [Python 일반] 파일(폴더) 이름에 사용할 수 없는 특수 문자 제거 졸리운_곰 2023.06.03 568
63 [Python 일반] 파이썬에서 재귀적으로 깊은 계층적 디렉토리를 생성하기 위한 makedirs 졸리운_곰 2023.06.03 294
62 [Python 일반] [python] requirements.txt로 패키지 관리하기 졸리운_곰 2023.05.05 288
61 [python 일반] pip이용하여 requirements.txt 만들기 file 졸리운_곰 2023.05.04 469
60 [Python 일반] 파이썬에서 프로그램 일시중지하는 세가지 방법 How to Pause in python 졸리운_곰 2023.03.17 435
59 [Python] 파이썬 프로젝트의 구조 file 졸리운_곰 2022.11.18 481
58 [python] [Python] 파이썬 Source의 기본 형태 file 졸리운_곰 2022.11.18 429
57 [python] 파이썬 스케줄 수행 - schedule, apscheduler file 졸리운_곰 2022.11.13 489
56 [python 일반] python 난독화 및 실행파일 한 번에 만들기 졸리운_곰 2022.11.06 467
55 [python] Apache Airflow 소개 및 실습하기(기초) file 졸리운_곰 2022.07.25 422
54 [python] Python Console Input & Output Tutorial 졸리운_곰 2021.11.06 376
53 [python][파이썬 조건문(if-elif-else)] 졸리운_곰 2021.07.24 301
52 [python] 파이썬 for 문 졸리운_곰 2021.07.24 388
51 [python][파이썬 기초] 48 파이썬으로 파일 만들기 졸리운_곰 2021.07.24 410
50 [Python] UnicodeEncodeError: 'ascii' codec can't encode file 졸리운_곰 2021.07.24 716
49 [python] *args 와 **kwargs 사용하기 - 슬기로운 파이썬 트릭 中 file 졸리운_곰 2021.07.24 455
48 [python] *args 와 **kwargs 졸리운_곰 2021.07.24 436
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED