conda create -n mysql_test python=3.8
conda activate mysql_test
pip install django
pip install mysqlclient
설치 이후 pip freeze
로 설치된 사항들을 확인하고 다음으로 넘어간다.
django-admin startproject mysql_test
my_settings.py
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': '',
'USER': 'root',
'PASSWORD': 'f',
'HOST': 'localhost',
'PORT': '3306',
}
}
일단 이름은 비워두었다. MySQL 에서 이름을 설정해준 뒤 입력할 것이므로 일단 저렇게 하고 나온다.
$ mysql -u root -p
위 명령어 입력 후 루트 비밀번호를 입력하여 mysql을 사용할 수 있게 된다.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> create database mysql_test
character set utf8mb4 collate utf8mb4_general_ci;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| mysql_test |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql_test 라는 데이터 베이스가 생겼다. 이제 아까 만든 my_settings.py
에 NAME 을 넣어주자. 어떻게? mysql_test 라고 짓자!
그런데 데이터베이스 삭제는 어떻게 할까? 일단 냅두자.
mysql_test 라는 이름이 맘에 안들어서 새로 books 라는 데이터베이스를 만들었다.
mysql> use books
Database changed
mysql> show tables;
Empty set (0.00 sec)
아직 테이블이 비어 있다.
mysql> CREATE TABLE novels (id INT NOT NULL, name VARCHAR(30));
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+-----------------+
| Tables_in_books |
+-----------------+
| novels |
+-----------------+
1 row in set (0.00 sec)
explain 테이블명;
mysql> explain novels;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | NO | | NULL | |
| name | varchar(30) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
음 하지만 기본 조회밖에 되지 않는다. 아래 7-6 을 보자.
mysql> ALTER TABLE novels ADD ordered_at DATE;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> explain novels;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id | int | NO | | NULL | |
| name | varchar(30) | YES | | NULL | |
| ordered_at | date | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
추가한 데이터 테이블의 타입 (type) 에 대해서는 아래의 사이트를 참고하자.
https://dev.mysql.com/doc/refman/8.0/en/data-types.html
mysql> show tables;
+-----------------+
| Tables_in_books |
+-----------------+
| novels |
+-----------------+
1 row in set (0.00 sec)
mysql> DROP TABLE novels;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
Empty set (0.00 sec)
몇 가지 예제를 들어야 하니까 테이블을 다시 만들자.
mysql> INSERT INTO novels VALUES(1, 'Harry Potter Series', '2020-05-19');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM novels;
+----+---------------------+------------+
| id | name | ordered_at |
+----+---------------------+------------+
| 1 | Harry Potter Series | 2020-05-19 |
+----+---------------------+------------+
1 row in set (0.00 sec)
mysql> INSERT INTO novels VALUES(2, 'Who steal my Cheese?', '2020-05-20');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM novels;
+----+----------------------+------------+
| id | name | ordered_at |
+----+----------------------+------------+
| 1 | Harry Potter Series | 2020-05-19 |
| 2 | Who steal my Cheese? | 2020-05-20 |
+----+----------------------+------------+
2 rows in set (0.00 sec)
가령 위의 예시에서 주문 날짜를 바꿔서 업데이트 하고 싶을 수도 있다.
mysql> UPDATE novels SET ordered_at='2020-05-20' WHERE id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM novels;
+----+----------------------+------------+
| id | name | ordered_at |
+----+----------------------+------------+
| 1 | Harry Potter Series | 2020-05-20 |
| 2 | Who steal my Cheese? | 2020-05-20 |
+----+----------------------+------------+
2 rows in set (0.00 sec)
mysql> DELETE FROM novels WHERE id=2;
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM novels;
+----+---------------------+------------+
| id | name | ordered_at |
+----+---------------------+------------+
| 1 | Harry Potter Series | 2020-05-20 |
+----+---------------------+------------+
1 row in set (0.00 sec)
기존의 settings.py 내 database sqlite 부분을 주석 처리한다.
터미널에서 주석 처리하는 방법은 아래 링크를 참조하자.
https://ddiri01.tistory.com/206
그리고 새롭게 세팅한 데이터 베이스를 적용한다.
DATABASES = my_settings.DATABASES