"장고 DB설정"의 두 판 사이의 차이
(→연동) |
|||
28번째 줄: | 28번째 줄: | ||
==MySQL 연동== | ==MySQL 연동== | ||
− | 사전에 DB를 만들어두어야 한다. | + | |
+ | === 사전 준비 DB세팅 === | ||
+ | 사전에 DB를 만들어두어야 한다. DB를 만들어주었다면 다음을 진행하자. | ||
+ | {| class="wikitable" | ||
+ | !과정 | ||
+ | !설명 | ||
+ | !방법 | ||
+ | |- | ||
+ | |기본 라이브러리 설치 | ||
+ | |아래 과정 중 에러가 나면 이것부터 시작하자. | ||
+ | (보통 도커나 가상환경 등 최소한의 것들만설치되어 있는 환경에서 필요하다.) | ||
+ | |<code>sudo apt-get install python3-dev default-libmysqlclient-dev build-essential</code> | ||
+ | |- | ||
+ | |연동드라이버 설치 | ||
+ | |mysqlclient 설치 | ||
+ | 아래와 같은 에러가 뜨면 위부터 시작하자. | ||
+ | |||
+ | note: This error originates from a subprocess, and is likely not a problem with pip. error: metadata-generation-failed | ||
+ | |pip install mysqlclient | ||
+ | |} | ||
+ | |||
+ | === DB 설정 === | ||
{| class="wikitable" | {| class="wikitable" | ||
!과정 | !과정 | ||
49번째 줄: | 70번째 줄: | ||
'HOST': 'localhost', | 'HOST': 'localhost', | ||
'PORT': '3306', | 'PORT': '3306', | ||
+ | 'OPTIONS': { | ||
+ | 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", | ||
+ | 'charset': 'utf8mb4', # 테이블 생성할 때 유니코드 지정.(한국어 표현을 위해.) | ||
+ | 'use_unicode': True, | ||
+ | } | ||
} | } | ||
} | } | ||
54번째 줄: | 80번째 줄: | ||
|- | |- | ||
|반영하기 | |반영하기 | ||
− | |이전에 백업한 데이터가 있다면 다음의 명령어를 쓰자. | + | |이전에 백업한 데이터가 있다면 다음의 명령어를 쓰자. |
<code>python manage.py loaddata db.json</code> | <code>python manage.py loaddata db.json</code> | ||
60번째 줄: | 86번째 줄: | ||
|} | |} | ||
+ | == MariaDB == | ||
+ | mySQL과 완전히 동일하게 진행하면 된다. | ||
+ | 다만, 설정파일 경로가 다르다. mysql은 <code>cd /etc/mysql/mysql.conf.d/</code>인 반면, mariadb는 <code>cd /etc/mysql/mariadb.conf.d/</code> 안에 있다. | ||
+ | |||
+ | === mysql과의 차이 === | ||
+ | {| class="wikitable" | ||
+ | !항목 | ||
+ | !mySQL | ||
+ | !MariaDB | ||
+ | |- | ||
+ | |설정파일 디렉터리 | ||
+ | |<code>/etc/mysql/mysql.conf.d/</code> | ||
+ | |<code>/etc/mysql/mariadb.conf.d/</code> | ||
+ | |- | ||
+ | |사용자 설정 | ||
+ | |client.cnf | ||
+ | |50-client.cnf | ||
+ | |- | ||
+ | | | ||
+ | |마지막 재실행 경로. | ||
+ | |/etc/init.d/mariadb restart | ||
+ | |} | ||
=DB쿼리 사용하기= | =DB쿼리 사용하기= | ||
− | python manage.py dbshell 를 통해 데이터베이스의 쿼리를 | + | python manage.py dbshell 를 통해 데이터베이스의 쿼리를 다룰 수 있다. |
+ | |||
+ | = 관련에러 = | ||
+ | |||
+ | === utf-8' codec can't decode === | ||
+ | 다양한 방법이 있겠지만... 어이없게 풀렸다. | ||
+ | {| class="wikitable" | ||
+ | !시도 | ||
+ | !설명 | ||
+ | |- | ||
+ | |json 저장 유니코드 변경 | ||
+ | |<code>python manage.py dumpdata > db.json</code>에서 만든 백업파일이 utf-8로 인코딩 되어있지 않은 경우에 먹힌다. | ||
+ | |||
+ | 메모장이든 어떤 것이든 아무 편집기에서 다른 이름으로 저장하여 utf-8로 인코딩 하여 저장한다. | ||
+ | |||
+ | 그리고 이렇게 저장한 파일을 <code>python manage.py loaddata db.json</code>로 풀어내면.. 그간의 노력이 무색하게 된다; | ||
+ | |||
+ | [https://stackoverflow.com/questions/17843630/python-can-dumpdata-cannot-loaddata-back-unicodedecodeerror 링크]를 참조하였다. | ||
+ | |- | ||
+ | |DB기초 설정 | ||
+ | |DB의 인코딩이 utf-8로 되게끔 설정. [https://hongjuzzang.github.io/howto/mysql_django/ 링크]를 참조하자. | ||
+ | |} | ||
[[분류:2. 장고 설정]] | [[분류:2. 장고 설정]] |
2022년 9월 15일 (목) 17:30 판
1 개요
모델에 의해 관리되는 데이터베이스.
기본 설치는 SQLite로 되어있다.
그러나, 동시접근처리능력에서 약해 엔터프라이즈급 DB를 사용해야 할 때가 있다.
1.1 공식지원 DB
MySQL(Maria DB), PostgreSQL, Oracle DB를 공식적으로 지원하고 있다.
2 연동
기본적인 절차는 다음과 같다.
- 연동드라이버 설치
- settings.py 수정
- DB반영
- python manage.py migrate
- 재설정
- 처음 만든 DB는 초기화 상태. 관리자계정 생성 등 이런저런 설정을 다시 해주어야 한다.
2.1 설정
데이터베이스 관련 설정에서 ENGINE을 수정하여 기본 DB를 설정할 수 있다.
기본적으로 django.db.backends.sqlite3
라고 되어있지만, django.db.backends.postgresql
,django.db.backends.mysql
,django.db.backends.oracle
까지 4가지를 공식 지원한다.
2.2 SQLite
장고 기본 DB. GUI도구인 DB Browser for SQLite를 설치하면 테이블들을 볼 수 있다.
2.2.1 백업
처음엔 SQLite로 개발하다 실제 서비스에서 다른 DB로 넘어가야 할 때가 있다. 그때 기존에 사용하던 데이터를 그대로 옮기고 싶다면 다음의 명령으로 백업파일을 만들자.
python manage.py dumpdata > db.json
2.3 MySQL 연동
2.3.1 사전 준비 DB세팅
사전에 DB를 만들어두어야 한다. DB를 만들어주었다면 다음을 진행하자.
과정 | 설명 | 방법 |
---|---|---|
기본 라이브러리 설치 | 아래 과정 중 에러가 나면 이것부터 시작하자.
(보통 도커나 가상환경 등 최소한의 것들만설치되어 있는 환경에서 필요하다.) |
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential
|
연동드라이버 설치 | mysqlclient 설치
아래와 같은 에러가 뜨면 위부터 시작하자. note: This error originates from a subprocess, and is likely not a problem with pip. error: metadata-generation-failed |
pip install mysqlclient |
2.3.2 DB 설정
과정 | 설명 | 방법 |
---|---|---|
연동드라이버 설치 | mysqlclient 설치 | pip install mysqlclient |
settings.py 수정 | DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mysite',
'USER': 'user',
'PASSWORD': '1234',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
'charset': 'utf8mb4', # 테이블 생성할 때 유니코드 지정.(한국어 표현을 위해.)
'use_unicode': True,
}
}
}
| |
반영하기 | 이전에 백업한 데이터가 있다면 다음의 명령어를 쓰자.
|
python manage.py migrate |
2.4 MariaDB
mySQL과 완전히 동일하게 진행하면 된다.
다만, 설정파일 경로가 다르다. mysql은 cd /etc/mysql/mysql.conf.d/
인 반면, mariadb는 cd /etc/mysql/mariadb.conf.d/
안에 있다.
2.4.1 mysql과의 차이
항목 | mySQL | MariaDB |
---|---|---|
설정파일 디렉터리 | /etc/mysql/mysql.conf.d/
|
/etc/mysql/mariadb.conf.d/
|
사용자 설정 | client.cnf | 50-client.cnf |
마지막 재실행 경로. | /etc/init.d/mariadb restart |
3 DB쿼리 사용하기
python manage.py dbshell 를 통해 데이터베이스의 쿼리를 다룰 수 있다.
4 관련에러
4.1 utf-8' codec can't decode
다양한 방법이 있겠지만... 어이없게 풀렸다.
시도 | 설명 |
---|---|
json 저장 유니코드 변경 | python manage.py dumpdata > db.json 에서 만든 백업파일이 utf-8로 인코딩 되어있지 않은 경우에 먹힌다.
메모장이든 어떤 것이든 아무 편집기에서 다른 이름으로 저장하여 utf-8로 인코딩 하여 저장한다. 그리고 이렇게 저장한 파일을 링크를 참조하였다. |
DB기초 설정 | DB의 인코딩이 utf-8로 되게끔 설정. 링크를 참조하자. |