본문 바로가기
카테고리 없음

sqlite3에서 MySQL로 DB 변경 - with Django

by abccoco 2023. 3. 16.
해당 글에서는 Django에서 MySQL DB를 설정하는 방법을 다뤘습니다.

목차

1. MySQL 설치

2. MySQL 드라이버 설치

3. Django 설정 변경

4. 중간 마이그레이션

5. 확인

 

1. MySQL 설치

  • 다운로드 및 설치 방법은 아래의 링크를 참조하자.
 

MySQL 다운로드 및 설치 방법

📌Window10에 MySQL 다운로드 및 설치 하기 1. MySQL 홈페이지 접속 MySQL 링크 주소 :

velog.io

위의 링크에 따라 MySQL을 다운로드를 완료했다면 Django와 MySql를 연결해보자.

 

2. MySQL 드라이버 설치

먼저 **드라이버(Driver)**란 무엇일까요? 드라이버(Driver)는 컴퓨터에서 다른 장치나 소프트웨어와 상호작용하기 위한 인터페이스를 제공하는 프로그램입니다. **데이터베이스 드라이버(Database Driver)**는 데이터베이스와 상호작용하기 위한 인터페이스를 제공하는 프로그램입니다.

즉 Django에서 MySQL을 사용하려면, MySQL과 상호작용할 수 있는 드라이버(Driver) 를 설치해야 합니다. 드라이버(Driver) 중에는 2가지 중 하나를 선택할 수 있습니다.

  • **mysqlclient**
  • **MySQL Connector/Python**

해당 글에서는 **mysqlclient** Driver 사용하겠습니다.

# mysqlclient를 install 합니다.
pip install mysqlclient

 

 

3. Django 설정 변경

**settings.py** 의 **DATABASES**를 수정합니다. 하지만 주의할 점이 있습니다.

  • 보안
    • **git**에 settings.py를 올리게 된다면 name, password가 그대로 노출되기 때문입니다. 따라서 필자는 Django 프로젝트 안에 my_settings.py 라는 임의로 정한 파일에 **DATABASES** 의 정보를 넣어주고 settings.py에 **변수**로 해당 정보를 가져왔습니다. 또한 SECRET_KEY 도 유출되면 안 되는 정보이므로 앞서 설명한 방법으로 SECRET_KEY도 저장했습니다.
  • DATABASES에서의 설정 이름, 비밀번호는, MySQL이름과, 비밀번호와 동일해야 합니다.
    **DATABASES** 의 이름, 비밀번호는 반드시 MySQL 에서 로그인하는 이름, 비밀번호와 동일해야 합니다. 동일하지 않다면 **error**가 발생합니다.
'''
shell 환경에서 다음과 같은 명령어를 입력하면 로그인이 가능합니다.
이때 사용되는 사용자 이름, 비밀번호를 DATABASES에 동일하게 넣어야 한다는 의미입니다.
'''

# shell 환경
mysql -u [사용자이름] -p

아래의 code는 예시입니다.

# settings.py
import my_settings
DATABASES = my_settings.DATABASES
SECRET_KEY = my_settings.SECRET_KEY

# my_settings.py(파일명은 마음데로)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '데이터베이스 이름', # MySQL dbname를 넣어야 합니다.
        'USER': '사용자 이름', # MySQL username를 넣어야 합니다.
        'PASSWORD': '패스워드', # MySQL password를 넣어야 합니다.
        'HOST': '호스트 이름',
        'PORT': '포트 번호', # mysql에서는 '3306'포트를 사용합니다.
        'OPTIONS': {
            'autocommit': True,
            'charset': 'utf8mb4',
        },
    }
}

SECRET_KEY = '기존의 SECRET_KEY'
하지만 여기서 내가 name과 password를 언제 만들었지? 라는 질문이 생기셨나요?

**username**(dbname X)과 **password**는 **목차 1번 의 **MySQL 설치 에서 진행하셨습니다.

MySQL 설치를 하셨다면 아마 여러분들은 **'root'** 라는 이름의 **username**이 만들어 지셨을 거에요.

**목차 1번**의 설명대로 진행하셨다면 다음과 같은 화면을 보셨을 겁니다.

**username**이 ‘root’라는 것을 확인할 수 있다.
**password** 부분입니다.
**로그인**

4. 중간 마이그레이션

Django 설정 변경을 성공적으로 했다면, 마이그래이션을 수행합니다.

python manage.py makemigrations
python manage.py migrate

5. 확인

sql에 로그인 해 봅시다.

mysql -u [사용자이름] -p

 

sql이 실행중인지 확인해 봅시다.

해당 명령어를 실행했을 때 sql의 version이 나온다면 sql이 실행 중인 것입니다.

SELECT @@version;
# 이렇게 나와요. 버전은 사용자마다 다를 수 있어요.
+-----------+
| @@version |
+-----------+
| 8.0.32    |
+-----------+

 

db를 생성해 봅시다.

CREATE DATABASE [db이름];

 

db가 잘 생성됬는지 확인해 봅시다.

SHOW DATABASES;

 

잘 생성됬다면 사용하고자 하는 db를 선택합니다.

USE [db이름];

 

runserver 을 해서 오류가 있는지 확인할 수 있습니다.

python manage.py runserver

 

해당 user의 권한이 없다는 error가 발생했다면 다음의 명령어를 사용합니다.

# 해당 명령어는 user에게 모든 데이터베이스와 테이블에 대한 모든 권한을 부여합니다.
GRANT ALL PRIVILEGES ON *.* TO '[사용자이름]'@'localhost';
#  해당 명령어는 권한 변경된 권한을 적용해줍니다.
FLUSH PRIVILEGES;

'''
다시 runserver를 통해 error가 발생하는지 확인합니다.
발생하지 않는다면 다음 과정으로 넘어갑니다.
'''

 

Django **models.py** 에서 사용하고자 하는 model을 정의하고 마이그레이션을 해 줍니다. 마이그레이션은 언제 하든 괜찮지만, 해당 글에서 2번 하는 이유는 하나의 작업이 끝난 뒤에 오류가 있는지 확인하기 위함입니다. 오류가 있다면 마이그레이션을 할때 확인할 수 있습니다.

python manage.py makemigrations
python manage.py migrate

 

여기까지 잘 따라 오셨다면 MySQL 설정을 완료했어요! 수고하셨습니다.ㅎㅎ 혹시 오류가 있다면 댓글을 통해 알려주세요. 감사합니다^^

댓글