지난 글에서 models.py를 이용하여 db를 생성한 적이 있다.

http://leopit.tistory.com/174?category=684110

 

DJANGO는 디폴트로 sqlite db를 사용하게 되어 있는데 django 자습을 하다 문득 궁금해졌다. MODEL에 정의한 필드들은 실제 DB에 어떻게 저장되는지..

 

그래서 sqlite보다는 더 익숙한 MYSQL을 연동해 보았다.

 

1. mysql 설치

- mysql 은 유료다. 무료인 mariadb를 설치하였다.

[root@leopit.com ~]# yum install mariadb-server
[root@leopit.com ~]# systemctl start mariad


이제 실제 사용할 mysql 유저 계정과 DB를 만들겠다.

자세한 메뉴얼은 MYSQL 관련 사이트에서 확인하기 바란다.

# 계정 생성

create user 'cert'@'%' identified by 'password';
create user 'cert'@'localhost' identified by 'password';

 

# DB 생성

create database pat;

 

# 권한주기

grant all privileges on *.* to 'cert'@'localhost';
grant all privileges on *.* to 'cert'@'%';

 

cert라는 계정과 pat이란 db를 만들었다.

장고랑 연결해주자

 

2. settings.py 설정

- 상단에 pymysql을 추가해주고 sqlite 부분을 주석처리 해주고 mysql 정보를 입력하였다.

import pymysql
pymysql.install_as_MySQLdb()

 

.

.

.

 

#DATABASES = {
#    'default': {
#        'ENGINE': 'django.db.backends.sqlite3',
#        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#    }
#}

 

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'pat',
        'USER': 'cert',
        'PASSWORD': 'xxxx',
        'HOST': 'x.x.x.x',
        'PORT': '3306',
        'OPTIONS': {
            'read_default_file': './db.cnf',
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"
        }
    }
}


 

3. DB 생성 및 확인

지난글에서 만들었던 models.py 내용이다. (클래스명만 변경)

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.

 

class testmodel(models.Model):
    name = models.CharField(max_length=50)
    title = models.CharField(max_length=50)
    content = models.TextField()
    cdate = models.DateTimeField(auto_now_add=True)

 

makemigration과 migrate 커맨드를 통해 DB 등록 진행

[root@leopit.com ~]# python manage.py makemigrations

[root@leopit.com ~]# python manage.py migrate

 

이제 실제 DB에 어떻게 테이블이 생성되었는지 보자

[root@leopit.com ~]# mysql -u cert -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 74
Server version: 5.5.60-MariaDB MariaDB Server

 

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

MariaDB [(none)]> use pat


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
MariaDB [pat]> show tables;
+----------------------------+
| Tables_in_pat              |
+----------------------------+
| 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             |
| pat_testmodel              |
+----------------------------+
11 rows in set (0.00 sec)

MariaDB [pat]> Ctrl-C -- exit!
Aborted
[root@cert-pat pat]#


 

 

장고에 필요한 기본적인 테이블과 models.py에 등록한 testmodel이란 테이블이 앱이름_testmodel 이란 테이블명으로 생성되어 있다. 테이블 안에 필드들도 살펴보자

MariaDB [pat]> desc pat_testmodel;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(11)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(50) | NO   |     | NULL    |                |
| title   | varchar(50) | NO   |     | NULL    |                |
| content | longtext    | NO   |     | NULL    |                |
| cdate   | datetime    | NO   |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

MariaDB [pat]> Ctrl-C -- exit!
Aborted

 

models.py에서 필드를 4개 선언했는데 5개가 생성되었다.

django에서는 Primary Key값이 자동으로 생성된다. id라는 필드명으로 PK가 생성되어져 있었다.

 

4. ADMIN 페이지에 DB 등록

앱 디렉토리 하단에 admin.py 를 아래와 같이 수정한다.

앱이름.models를 import 하고 models.py 에 입력한 testmodel 클래스명을 등록해준다.

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

 

from django.contrib import admin

 

# Register your models here.
from pat.models import *

 

admin.site.register(testmodel)

 

이렇게 하면 웹페이지에서 DB 확인이 가능하다.

http://자신의 URL/admin 으로 이동하면 로그인 계정정보를 입력하고 아래와 같이 테이블을 확인할 수 있다. 로그인 계정을 만들지 않았다면 python manage.py createsuperuser 커맨드를 통해 생성할 수 있다.

 

 

'Coding' 카테고리의 다른 글

노코드에 대한 생각  (2) 2024.11.30
로우코드와 노코드, 코딩 해방 가능한가?  (0) 2024.07.06
5. Django 글쓰는 폼 만들기  (0) 2018.12.30
4. Django DB 만들기  (0) 2018.12.30
Django 개발 흐름  (0) 2018.12.16

+ Recent posts