[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

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
437 [Python 인터넷] Using a Python HTTP Proxy Server to Simulate an API Gateway file 졸리운_곰 2023.03.11 366
436 [python][Django] [개념] Django는 Web Server가 아니라구요!! file 졸리운_곰 2023.03.11 464
435 [python][Django] [Django] Django Rest Framework에서 request 로깅하기 졸리운_곰 2023.03.11 381
434 [python][Django] Django REST Framework 졸리운_곰 2023.03.10 486
433 [python][Django] Django의 기본 개념 file 졸리운_곰 2023.03.10 473
432 [Python 인터넷] Django REST API 서버 만들기 file 졸리운_곰 2023.03.09 305
431 [Python 인터넷] django REST framework로 간단한 api 만들기 file 졸리운_곰 2023.03.08 489
430 [Python 인터넷] Quickstart - Django REST framework 졸리운_곰 2023.03.08 314
429 [python][자료구조] [MongoDB] Document Query(조회) – find() 메소드 졸리운_곰 2023.03.08 315
428 [python][자료구조] Python(flask)으로 mongoDB 제어하기 – pymongo file 졸리운_곰 2023.03.08 604
427 [python, tkinter] [python/GUI] tkinter 로 GUI 만들기(기초예제, 단위 변환기 만들기) file 졸리운_곰 2023.03.07 326
426 [Python 인터넷] 세상에서 가장 간단한 Airflow 튜토리얼 file 졸리운_곰 2023.03.05 316
425 [Python 인터넷] Flask 또는 Django를 Production 서버로 배포(Deploy)하기 file 졸리운_곰 2023.03.03 331
424 [Python 인터넷] django 웹사이트 배포를 하며 겪은 시행착오 졸리운_곰 2023.03.03 282
423 [Python 인터넷] Windows에서 Django와 Apache 연동하기 졸리운_곰 2023.03.02 342
» [python][자료구조] django sqlite3 MySQL로 전환하기 file 졸리운_곰 2023.03.02 409
421 [python][자료구조] django에서 db.sqlite3 데이터를 mysql로 옮기기 졸리운_곰 2023.03.02 427
420 [python][자료구조] Python - JSON 파일 읽고 쓰는 방법 졸리운_곰 2023.02.04 480
419 [python][자료구조] [인코딩] 유니코드 인코딩 처리 (특히 json 입출력 시) 졸리운_곰 2023.02.04 363
418 [Python 인터넷] 구글로 공부하는 파이썬 - 부록 (IIS, Apache 로 Flask 돌리기) file 졸리운_곰 2023.01.26 438
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED