MySQL 연동
패키지 설치
시스템 패키지
파이썬 MySQL 연동 라이브러리 패키지는 직접 빌드해야 하므로 아래의 시스템 패키지 설치가 필요합니다.
$ sudo apt-get install build-essential python3-dev libmysqlclient-dev
파이썬 패키지
독립된 가상환경에서 mysqlclient
파이썬 패키지를 설치합니다.
(venv) $ pip install mysqlclient
MySQL 접속 설정
설정 파일 수정
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'testdb',
'USER': 'ham',
'PASSWORD': 'pass',
'HOST': 'localhost',
'PORT': '',
}
}
예시의 설정 정보는 다음과 같습니다.
- 데이터베이스 이름: testdb
- 사용자 역할: egg
- 비밀번호: pass
데이터베이스 마이그레이션 및 슈퍼유저 생성
(venv) $ python manage.py makemigrations --settings=conf.settings.production
(venv) $ python manage.py migrate --settings=conf.settings.production
(venv) $ python manage.py createsuperuser --settings=conf.settings.production
일반적으로 로컬 테스트 환경에서 SQLite를 사용하지만 실제 RDBMS를 연결하는 경우는 운영서버인 경우가 많아서 --settings
옵션으로 알맞은 설정 프로필을 선택해야할 수도 있습니다.
마이그레이션 결과 확인
데이터베이스 마이그레이션 명령으로 testdb 데이터베이스 안에 기본 테이블이 만들어지므로 이를 확인하면 데이터베이스 연동이 올바로 되었는지 알 수 있습니다.
콘솔 접속
$ mysql -uham -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
데이터베이스 목록
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| testdb |
+--------------------+
2 rows in set (0.00 sec)
testdb 데이터베이스 연결
mysql> USE testdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
testdb 데이터베이스 내 테이블 목록 확인
mysql> SHOW TABLES;
+-------------------------------+
| Tables_in_pythonstory |
+-------------------------------+
| account_emailaddress |
| account_emailconfirmation |
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
| django_site |
| socialaccount_socialaccount |
| socialaccount_socialapp |
| socialaccount_socialapp_sites |
| socialaccount_socialtoken |
+-------------------------------+
17 rows in set (0.00 sec)
PostgreSQL 연동
패키지 설치
시스템 패키지
파이썬 PostgreSQL 연동 라이브러리 패키지는 직접 빌드해야 하므로 아래의 시스템 패키지 설치가 필요합니다.
sudo apt-get install build-essential python3-dev libpq-dev
파이썬 패키지
독립된 가상환경에서 psycopg2-binary
파이썬 패키지를 설치합니다.
(venv) $ pip install wheel psycopg2-binary
psycopg
는 가장 널리 쓰이는 PostgreSQL 파이썬 어댑터입니다.. 파이썬 DB API 2.0 명세(specification)를 모두 구현하고 여러 스레드가 같은 접속을 공유할 수 있어 스레드 안전(thread-safe)합니다. INSERT, UPDATE를 동시에 대량 처리하고 커서를 대량 만들고 없앨 수 있는 멀티스레드 애플리케이션을 만드는데 적합합니다.
Psycopg2는 효율과 보안을 위하여 대부분 C 언어로 구현한 libpq의 래퍼(wrapper) 라이브러리입니다. 클라이언트 커서, 서버 커서, 비동기 통신, 통지, "COPY TO/COPY FROM" 지원 등 다양한 기능을 지원합니다. Psycopg2는 유니코드와 파이썬3에서 잘 동작합니다. 바이너리 패키지는 개발/테스트 단계에서 가져다 쓰기 편리하지만 운영서버에서는 직접 빌드하여 쓰는 것을 권장합니다.
PostgreSQL 접속 설정
설정 파일 수정
conf/settings.py
파일에서 데이터베이스 연결 설정을 SQLite에서 PostgreSQL로 바꾸기 위해 아래와 같이 수정한다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'testdb',
'USER': 'egg',
'PASSWORD': 'pass',
'HOST': 'localhost',
'PORT': '',
}
}
예시의 설정 정보는 다음과 같습니다.
- 데이터베이스 이름: testdb
- 사용자 역할: egg
- 비밀번호: pass
데이터베이스 마이그레이션 및 슈퍼유저 생성
MySQL과 마찬가지로 PostgreSQL에서도 동일하게 마이그레이션과 슈퍼유저 생성 작업을 할 수 있습니다.
(venv) $ python manage.py makemigrations --settings=conf.settings.production
(venv) $ python manage.py migrate --settings=conf.settings.production
(venv) $ python manage.py createsuperuser --settings=conf.settings.production
마이그레이션 결과 확인
데이터베이스 마이그레이션 명령으로 testdb 데이터베이스 안에 기본 테이블이 만들어지므로 이를 확인하면 데이터베이스 연동이 올바로 되었는지 알 수 있습니다.
이 때 psql
명령어를 사용하기 위해서는 sudo
명령어를 쓸 수 있는 사용자 ham
으로 로그인해서 명령해야 합니다.
콘솔 접속
sudo -u postgres psql
psql (9.5.5)
Type "help" for help.
데이터베이스 목록
\list
명령어로 데이터베이스 목록을 확인하고 testdb
존재를 확인합니다.
postgres=# \list
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
testdb | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres +
| | | | | postgres=CTc/postgres+
| | | | | joe=CTc/postgres
(4 rows)
testdb 데이터베이스 연결
\c
명령어로 testdb
에 연결합니다.
postgres=# \c testdb
You are now connected to database "testdb" as user "postgres".
testdb 데이터베이스 내 테이블 목록 확인
Django 애플리케이션이 기본적으로 마이그레이션 설치하는 테이블 목록을 \dt
명령어로 확인할 수 있습니다.
testdb=# \dt
List of relations
Schema | Name | Type | Owner
--------+----------------------------+-------+-------
public | auth_group | table | joe
public | auth_group_permissions | table | joe
public | auth_permission | table | joe
public | auth_user | table | joe
public | auth_user_groups | table | joe
public | auth_user_user_permissions | table | joe
public | django_admin_log | table | joe
public | django_content_type | table | joe
public | django_migrations | table | joe
public | django_session | table | joe
(10 rows)