settings.py 설정
- mysql 데이터베이스에 사용할 app model 의 initial.py 를 생성한다
$ python manage.py makemigrations
- mysql 데이터베이스에 app model table 을 생성한다
$ python manage.py migrate
# Database 설정 DATABASES = { # 기본으로 default 의 database 명을 받아 DB migration 을 하게 된다 'default': { 'ENGINE': 'django.db.backends.mysql', # mysql db 를 사용한다 'NAME': 'database1', # database 명 'USER': 'testuser', # 사용자 id 'PASSWORD': 'testpasswd', # 사용자 password 'HOST': 'localhost', # ip address 'PORT': '3306', # port }, # 멀티 데이터베이스를 사용하게 될 경우, setting 'database2': { # database 명을 따라간다 'ENGINE': 'django.db.backends.mysql', 'NAME': 'database2', 'USER': 'testuser', 'PASSWORD': 'testpasswd', 'HOST': 'localhost', 'PORT': '3306', } } # 라우터를 통해 앱 별로 사용할 데이터 베이스를 선택하도록 한다 DATABASE_ROUTERS = [ # 프로젝트명.python패키지.python파일명.python클래스 'django_multi_databases.MultiDatabasesRouter.Router', ]
Router.py (선택사항)
- 멀티 데이터베이스 사용시, default 를 사용하지 않을 app 에 대해서만
$ python manage.py migrate {app_name} --database={database_name}
class Router(object): app_dictionary = { 'app1' : 'default', 'app2' : 'database2', } def db_for_read(self, model, **hints): return self.app_dictionary[model._meta.app_label]; def db_for_write(self, model, **hints): return self.app_dictionary[model._meta.app_label]; def allow_migrate(self, db, app_label, model_name=None, **hints): return True
models.py
mysql 맵핑 object 생성
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models from django.utils import timezone class DB1Model(models.Model): # 기본적으로 primary 를 선언하지 않으면 id 라는 auto increments 컬럼이 생성된다 title = models.CharField(max_length=255) content = models.TextField() likes = models.BigAutoField() lastModified = models.DateTimeField(default=timezone.now)
Serializer.py
DB model 과 django 프레임워크 의 object 를 연결
class DB1ModelSerializer(serializers.ModelSerializer): class Meta: model = DB1Model fields = ('id', 'title', 'content', 'likes, 'lastModified')
views.py
django 프레임워크 에서 CRUD 하는 로직 생성
class DB1ModelListCreateAPIView(generics.ListCreateAPIView): http_method_names = ['get', 'post'] queryset = DB1Model.objects.all() serializer_class = serializers.DB1ModelSerializer class DB1ModelRetrieveUpdateDestroyAPIView(generics.RetrieveUpdateDestroyAPIView): http_method_names = ['get', 'put', 'delete'] serializer_class = serializers.DB1ModelSerializer def get_object(self): queryset = self.filter_queryset(self.get_queryset()) filter_kwargs = {'id': self.kwargs['id']} model_instance = generics.get_object_or_404(queryset, **filter_kwargs) return model_instance
urls.py
CRUD 동작 과 RESTful API 와 연결
url(r'^/v1/dbmodel/$', views.DB1ModelListCreateAPIView.as_view(), name="api-dbmodel-lc"), url(r'^/v1/dbmodel/(?P<id>[^/]+)/$', views.DB1ModelRetrieveUpdateDestroyAPIView.as_view(), name="api-dbmodel-rud"),
'개발 > python' 카테고리의 다른 글
python - opencv 를 이용한 이미지 처리 (0) | 2018.08.25 |
---|---|
Python multiprocess vs multithread (0) | 2018.05.24 |
Django 프로젝트에서 batch job 돌리기 (0) | 2018.01.23 |
Django 프로젝트 (0) | 2017.11.29 |
Django 프로젝트 생성 및 App 만들기 (0) | 2017.08.27 |