[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

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
58 [python][flask] (flask) windows에서 flask와 apache 연동 file 졸리운_곰 2023.01.17 354
57 [Python][flask] Flask 로 Rest API 구현하기 - 개발환경구축 file 졸리운_곰 2022.12.24 848
56 [python][flask] bitnami의 django 서버로 flask 서비스 file 졸리운_곰 2021.12.10 592
55 [웹서버] Flask + REST API + Swagger file 졸리운_곰 2021.04.04 431
54 Python Flask 로 간단한 REST API 작성하기 file 졸리운_곰 2021.04.04 769
53 [파이썬][Flask] [번역] Flask 에서 백그라운드 작업을 처리하는 방법 file 졸리운_곰 2021.03.04 902
52 FLASK를 이용하여 PYTHON에서 PYTORCH를 REST API로 배포하기 졸리운_곰 2021.02.09 454
51 [flask 트랜드 홈페이지 개발] 10 - 다음 뉴스 키워드로 크롤링 file 졸리운_곰 2020.12.03 399
50 [python 트랜드 홈페이지개발] 9 - Flask POST file 졸리운_곰 2020.12.03 344
49 [python 트랜드 홈페이지개발] 8 - 약간의 레이아웃 설정하기 file 졸리운_곰 2020.12.03 518
48 [python 트랜드 홈페이지개발] 7 - 개요 file 졸리운_곰 2020.12.03 550
47 [python 트랜드 홈페이지개발] 6 - href 연결하기 file 졸리운_곰 2020.12.03 604
46 [python 트린드 홈페이지개발] 5 - 다른 페이지 크롤링 file 졸리운_곰 2020.12.01 506
45 [python 트린드 홈페이지개발] 4 - flask에 css 적용하기 file 졸리운_곰 2020.12.01 569
44 [python 트린드 홈페이지개발] 3 - 크롤링한 데이터 html에 보여주기 file 졸리운_곰 2020.12.01 546
43 [python 트린드 홈페이지개발] 2 - flask 프로젝트 생성, 세팅 file 졸리운_곰 2020.12.01 460
42 [python 트린드 홈페이지개발] 1 - 트렌드 홈페이지 개발 개요 file 졸리운_곰 2020.12.01 450
41 Flask 에서 CKEditor 파일첨부 연동 졸리운_곰 2020.11.26 631
40 플라스크 (Flask) - 회원가입 기능 만들기 (MVC 패턴 ) file 졸리운_곰 2020.11.26 518
39 Simple Python Flask Program with MongoDB file 졸리운_곰 2020.11.07 441
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED