카테고리 없음

[로가디아] 간단한 DB와 API

카늬 2025. 3. 27. 22:56

데이터베이스 설정 변경 (SQLite → PostgreSQL)

# settings.py
import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ.get('DB_NAME'),
        'USER': os.environ.get('DB_USER'),
        'PASSWORD': os.environ.get('DB_PASSWORD'),
        'HOST': os.environ.get('DB_HOST'),
        'PORT': os.environ.get('DB_PORT'),
    }
}

 

.env파일에 db에 관련되어있는 정보를 환경변수로 넣어주어  os.environ.get()를 사용하여 환경변수에 존재하는 DB관련 정보를 가져오기만 하면 됩니다.


CSV → PostgreSQL 적재 스크립트 작성

임시데이터를 사용하기 위해 csv파일을 읽어 db에 적재할 load_csv파일을 작성

# items/load_csv.py
import pandas as pd
from items.models import Item

def load_csv_to_db(file_path):
    df = pd.read_csv(file_path)
    for _, row in df.iterrows():
        Item.objects.create(
            category=row['category'],
            stage_name=row['stage_name'],
            stage_level=int(row['stage_level']),
            entry_level=int(row['entry_level']),
            item_name=row['item_name'],
            quantity=int(str(row['quantity']).replace(',', '')),
            binding=row['binding']
        )
    print("CSV 데이터베이스 적재 완료")

models.py에서 작성한 테이블 컬럼과 적재 할 csv파일의 컬럼을 비교하여 작성

 

셀스크립트를 사용해 load_csv를 작동시켜 db에 데이터를 적재

python manage.py shell
>>> from items.load_csv import load_csv_to_db
>>> load_csv_to_db("csv파일")

 

정상적으로 데이터가 적재된 것을 확인

 


Django REST Framework로 API 생성

#serializers.py
from rest_framework import serializers
from .models import Item

class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = '__all__'
        


#views.py
from rest_framework import viewsets
from .models import Item
from .serializers import ItemSerializer

class ItemViewSet(viewsets.ModelViewSet):
    queryset = Item.objects.all()
    serializer_class = ItemSerializer



#items/urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import ItemViewSet

router = DefaultRouter()
router.register(r'items', ItemViewSet)

urlpatterns = [
    path('', include(router.urls)),
]



#프로젝트 urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('items.urls')),
]

localhost:8000/api/items로 접근하여 값을 반환하는지 확인


에러발생

raise TemplateDoesNotExist(template_name, chain=chain)

 해결: settings.py → INSTALLED_APPS에 rest_framework 추가

#settings.py
INSTALLED_APPS = [
    ...
    'rest_framework',
]