Python/Django

[Django-Memo] 3. 데이터베이스 설정 및 기본 APP migration

꼰대 2021. 5. 28. 14:34

django를 설치하면 기본 데이터베이스로 sqlite3로 설정되어 있습니다.

개발 시 이 데이터베이스를 사용해도 무방하나 django를 처음 배우는 입장에서 전체적인 구조를 이해하기 위해 실제 데이터베이스를 셋팅하려 합니다.

현재 mariaDB를 설치하였으며 기존 설정은 sqlite3 이름으로 두고 mariaDB 설정을 추가하도록 하겠습니다.

 

우선 /config/settings.py를 열어 "DATABASES" 구문을 찾습니다.

 

기본 설정은 sqlite3엔진에 BASE_DIR (프로젝트 폴더)에 있는 db.sqlite3라는 이름의 데이터베이스를 사용한다는 내용입니다.

 

"ENGINE"은 django에서 기본으로 제공하는 데이터베이스 관련 엔진이며 내장된 엔진은 아래와 같습니다.

PostgreSQL : 'django.db.backends.postgresql'
MySQL : 'django.db.backends.mysql'
sqlite3 : 'django.db.backends.sqlite3'
ORACLE : 'django.db.backends.oracle'

 

다른 데이터베이스를 이용한다면 제조사에서 제공하는 패키지를 설정하면 됩니다.

(ex : package.backends.whatever)

 

현재 사용하려는 mariaDB는 MySQL기반 데이터베이스이기 때문에 아래와 같이 설정을 변경하고 기존 값은 sqlite3라는 이름으로 남겨두겠습니다.

'ENGINE': 'django.db.backends.mysql',
'NAME': 'directus_db',
'USER': 'root',
'PASSWORD': '******',
'HOST': '192.168.1.101',
'PORT': '3306',

 

 

이제 서버를 실행하고.... 응?

 

에러는 "ModuleNotFoundError: No module named 'MySQLdb'"

모듈이 없다는 내용입니다.

"C:\Python39\lib\site-packages\django\db\backends\mysql\base.py" 이 파일에서

"import MySQLdb as Database" 이렇게 모듈을 import 했는데

'MySQLdb' 이게 없다네요.

 

훔....

분명 django 문서에는 built-in 이라고 있는데요...

https://docs.djangoproject.com/en/3.2/ref/settings/#std:setting-DATABASE-ENGINE

 

Settings | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

찾아보니 별도로 클라이언트를 설치해야한다고 합니다.

pip install mysqlclient

 

설치 후 실행하니 문제없이 잘 됩니다.

 

 

이제 저 빨간색을 없애야 합니다.

내용은 admin, auth, contenttypes, sessions app이 migration 안되어 있어

'python manage.py migrate' 을 Run해서 apply하라고 합니다.

즉, django를 설치하면 기본으로 생기는 app에 대해 데이터베이스 테이블 생성하라는 말로 해석하면 되겠습니다.

 

현재 데이터베이스를 보면 아래 그림과 같이 아무것도 없습니다.

"directus_"로 시작하는 테이블은 데이터베이스 관리 툴인 directus에서 생성한 테이블이니 django와 관련 없는 테이블입니다.

 

 

이제 하라는데로 migtation을 하겠습니다.

메시지는 OK 나오는걸로 봐서 잘 된거 같습니다.

 

 

테이터베이스를 보면 directus 관련 테이블을 제외하고 10개의 테이블이 새로 생겼습니다.

모두 기본 APP에서 사용하는 테이블이 migration을 통해 생성되었습니다.

 

 

django 서버를 다시 실행하면 처음 실행 시 보였던 빨간색 메시지가 없습니다.

 

 

나중에 이야기 하겠지만 Model을 통해 테이블 생성 시 (즉, migration 실행 시) 먼저 해줘야하는 작업이 있습니다.

"python manage.py makemigrations" 입니다.

그 다음 "python manage.py migrate" 해서 테이블을 생성해야 합니다.

(위 기본 APP은 makemigrations이 필요 없습니다.)

 

makemigrations은 테이블 작업을 위한 파일을 생성하는 명령이고

migrate는 생성된 파일을 이용하여 실제 테이블을 생성하는 명령입니다.

 

이제 데이터베이스 관련 설정은 끝났습니다.

다음에는 실제 APP을 하나씩 만들겠습니다.

반응형