20241227

Python + Django + Mysql 연결

Django에서 MySQL 데이터베이스 설정하기

Django 프로젝트에서 MySQL 데이터베이스를 사용하려면, MySQL 커넥터를 설치하고 settings.py 파일에서 데이터베이스 설정을 변경해야 합니다. 이 글에서는 Django에서 MySQL을 설정하고 데이터베이스를 연결하는 방법을 설명합니다.

1. MySQL 커넥터 설치

Python에서 MySQL 서버와 통신할 수 있도록 MySQL 커넥터를 설치해야 합니다. 아래 명령어를 사용하여 설치합니다:

$ pip3 install mysqlclient

2. Django 데이터베이스 설정

Django 프로젝트의 설정 파일인 mysite/settings.py를 열어보면, 기본적으로 SQLite가 설정되어 있습니다. 이를 MySQL로 변경하려면, DATABASES 설정을 아래와 같이 수정합니다:

# mysite/settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'testdjango',  # 데이터베이스 이름
        'USER': 'root',         # MySQL 사용자 이름
        'HOST': 'localhost',    # MySQL 서버 주소
        'PORT': '3306',         # MySQL 포트 번호
    }
}

3. TIMEZONE 설정

한국 시간대를 사용하려면, LANGUAGE_CODETIME_ZONE을 다음과 같이 설정합니다:

# mysite/settings.py
LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_TZ = False  # DB에 TIME_ZONE을 반영하려면 False로 설정

4. 데이터베이스 체크 및 모델 생성

MySQL 데이터베이스에 있는 테이블을 자동으로 Django 모델로 생성하려면, 아래 명령어를 실행하여 해당 DB에 있는 테이블을 확인하고, 이를 Django 모델로 변환합니다:

$ python3 manage.py inspectdb

위 명령어를 실행하면, MySQL에 존재하는 테이블들을 모델로 변환하여 출력합니다. 예를 들어, Test1 테이블이 있다면 아래와 같은 모델이 생성됩니다:

from django.db import models

class Test1(models.Model):
    name = models.CharField(max_length=20, blank=True, null=True)
    id = models.CharField(primary_key=True, max_length=20)
    age = models.IntegerField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'test1'

생성된 모델을 polls/models.py에 복사하여 붙여넣습니다.

5. 모델 활성화

모델을 프로젝트에서 활성화하려면, polls 앱을 프로젝트에 추가해야 합니다. polls/apps.py에 존재하는 클래스를 INSTALLED_APPS에 추가합니다:

# mysite/settings.py
INSTALLED_APPS = [
    'polls.apps.PollsConfig',  # polls 앱 추가
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

6. 모델 뷰와 URL 설정

모델을 뷰에서 사용할 수 있도록 polls/views.py에 모델을 불러오는 코드를 추가하고, polls/urls.py에 URL을 설정합니다:

# polls/views.py
from .models import Test1

def test_view(request):
    items = Test1.objects.all()  # Test1 테이블의 모든 객체를 불러오기
    return render(request, 'index.html', {"items": items})

# polls/urls.py
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('items/', views.test_view),  # /items URL 추가
]

7. 결과 확인

웹 브라우저에서 http://127.0.0.1:8000/polls/items/에 접속하여 DB에서 가져온 데이터를 확인할 수 있습니다.