지난 글에서 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_literalsfrom 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 |