Django에서는 기본 데이터 베이스로 sqlite3를 제공해준다. setting.py 파일을 보면 sqlite3에 대한 설정을 확인할 수 있다. 아래와 같다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
나는 앞으로 MySQL을 사용할 것이기 때문에, 이 기본 정보를 바꾸고 Django-MySQL 조합을 완성하려 한다.
우분투 MySQL 설치
$ sudo apt install -y mysql-server
$ sudo mysql_secure_installation
[NO]
[최고관리자 password]
[Y:익명 사용자 제거]
[N:외부 로그인 허용]
[Y:테스트 데이터베이스 삭제]
[Y:privilege table 다시 로드]
환경 구성
django가 설치되어 있는 가상환경을 활성화한 뒤, mysqlclient
를 설치한다. 이 라이브러리를 활용하여 연동할 것이다.
$ pip install mysqlclient
우분투에서 mysqlclient 설치시 오류가 발생한다면,
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-zbw18e9_/mysqlclient/
이런 에러.
또는,
/bin/sh: 1: mysql_config: not found
이런 에러.
이때,
sudo apt-get install libmysqlclient-dev
다시
pip install mysqlclient
MySQL에 데이터베이스 생성
현재 프로젝트에서 이용할 데이터베이스를 MySQL 내부에 만들어주자. starbucks 라는 데이터 베이스를 생성한다.
mysql> create database starbucks character set utf8mb4 collate utf8mb4_general_ci;
Query OK, 1 row affected (0.01 sec)
character set utf8mb4 - 한글 사용 활성화
mysql> use starbucks
Database changed
mysql> show tables;
Empty set (0.00 sec)
지금은 아무 테이블도 없지만, 앞으로 이것 저것 넣으면 된다.
❔ 데이터베이스 삭제하려면
DROP DATABASE <database_name>
Django-MySQL 연동
여태 settings.py에 모든 정보를 몰아서 저장했지만, 지금부터는 my_settings.py라는 새로운 파일에 민감한 정보들을 따로 저장해두고, settings.py에서 import 해서 사용할 것이다.
my_settings.py 파일은 외부와 공유할 일이 없는 정보이기 때문에 .gitignore이라는 숨김 파일에 이름을 등록하여 github에 업로드 되지 않도록 만들어야 한다.
vim my_settings.py
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'starbucks',
'USER': 'root',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '3306',
}
}
my_settings.py
파일이 완성되었다. 그럼 진짜 setting.py
파일에서 import하러 가자!
vim settings.py
import my_settings
DATABASES = my_settings.DATABASES
모든 설정을 수정하였다면 데이터베이스에 테이블을 만들어줘야한다. ./manage.py migrate
mysql> use starbucks
mysql> show tables;
장고_어쩌구
세 테이블과, 내가 starbucks_menu.models에 만들어 둔 클래스에 해당하는 표들이 보인다.
이제 쓰면 된다.