본문 바로가기
Programming/python

[Python] 우분투에서 django mysql과 연동하기

by 유주원 2013. 11. 8.

해당 글은 python과 mysql이 설치되어 있다는 가정 하에서 진행합니다.

python pip를 통해 django를 설치 합니다.

sudo pip install django


설치가 완료되었으면, 제대로 설치되었는지 확인해 봅니다.

쉘에서 django-admin.py 명령을 쳤을 때 명령어 목록이 출력되면 django가 제대로 설치 된 것입니다.


이제 django로 관리할 프로젝트 폴더를 하나 만들고, 해당 폴더로 이동한 후 아래와 같이 입력합니다.

$> mkdir testProject

$> cd testProject

$> django-admin.py startproject testProject


위와 같이 만들면 testProject 안에 testProject라는 폴더가 하나 더 생성이 되고, 해당 폴더 안에는 testProject 폴더와 manage.py 파일이 생성됩니다. testProject 폴더 안에는 __init__.py, settings.py, urls.py, wsgi.py 파일이 생성되는 것을 확인 할 수 있습니다.

우선 django 서버를 실행 시켜봅니다.

$> python manage.py runserver


아직 아무런 설정도 하지 않았기 때문에 서버 화면은 127.0.0.1:8000을 통해 확인해 볼 수 있습니다.


이제 Django 프로젝트 안에 앱을 등록해야 합니다. 아래와 같이 쉘에 입력합니다.

$> python manage.py startapp "앱이름"


앱이 성공적으로 만들어지면 앱이름을 가진 폴더가 생성되며, 폴더 안에는 models, views, tests python 파일이 생성됩니다.

models 파일에는 DB와 관련된 모델을 기입, views에는 html에 렌더링 될 정보를 기입합니다.

여기서는 views는 다루지 않고 DB 연동만 다룰 예정이어서 models 파일만 수정하도록 합니다.


from django.db import models

from django.contrib import admin

 

# Create your models here.

class DjangoTest(models.Model) :

     userID = models.CharField(max_length=20, db_column='userID')

     contents = models.CharField(max_length=255, db_column='contents')

     accessTime = models.DateTimeField(db_column='accessTime')

 

     class Meta :

         db_table = 'DjangoTest'

        

     def __unicode__(self) :

            return "%s %s" %(self.id, self.userID)

  

 class DjangoTestAdmin(admin.ModelAdmin):

     list_display = ["id", "userID", "contents", accessTime"]

     search_fields = ["userID"]


DjangoTest와 DjangoTestAdmin이라는 클래스를 생성하였습니다.

DjangoTest Class는 DB의 한 테이블로써 다루게 될 내용들을 기입하였으며, DjangoTestAdmin Class는 DjangoTest의 Admin으로써 다루게 될 내용들을 기입하였습니다.

간략하게 필드는 userID와 contents, accessTime만 생성하였습니다.

이제 admin.py를 열어서 방금 생성한 DjangoTest 클래스와 DjangoTestAdmin 클래스를 등록해야 합니다.

 from django.contrib import admin

  from polls.models import *

  # Register your models here.

  admin.site.register(DjangoTest, DjangoTestAdmin)


아까 보았던 프로젝트의 settings.py 파일을 수정해서 DB와의 sync를 맞춥니다. 

settings.py 내에 DATABASES와 LANGUAGE_CODE, TIME_ZONE을 수정합니다.

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.sqlite3',

'NAME': database 명,

'USER': 사용자명,

'PASSWORD': 암호,

'HOST' : '',

'PORT' : '',

}

}

LANGUAGE_CODE = 'ko-KR'

TIME_ZONE = 'Asia/Seoul'


모든 설정이 끝났으면, 쉘에 db와의 sync를 맞추겠다는 명령을 전달합니다.

$>python manage.py syncdb


자동적으로 해당 Table과 column들을 생성하는 것을 볼 수 있습니다.

(만약 error가 발생했을 시엔 python에  mysqldb 플러그인이 있는지 확인해 보도록 합니다.)


다시 Django 웹서버를 시작하면, 아래와 같이 db 화면이 연결되어 있는 것을 확인 할 수 있습니다.