본문 바로가기
Coding/Python

[Python & Django] db데이터 호출하여 엑셀 파일로 전달해주는 api 만들기

by 포스트it 2024. 3. 21.
728x90
반응형

 

[Python & Django] db데이터 호출하여 엑셀 파일로 전달해주는 api 만들기

db에 있는 데이터를 엑셀로 다운받게 해주는 api를 만들어 봤습니다 !

제가 사용한 프레임워크가 장고일 뿐 어디든 함수를 가져다 쓰시면 됩니다 ㅎ

 

※ 코드 설명
이 수정된 코드에서는 BytesIO 객체를 사용하여 DataFrame의 내용을 메모리에 엑셀 파일로 저장하고,
이를 읽어서 HttpResponse 객체에 전달합니다.
이렇게 하면 클라이언트는 엑셀 파일을 다운로드할 수 있게 됩니다.
urls.py
from django.urls import path
from .views import export_to_excel

urlpatterns = [
    # 기존 경로들...
    path('export_to_excel/', export_to_excel, name='export_to_excel'),
]

 

view.py
import pandas as pd
from django.http import HttpResponse
from .models import OusurveyLogs
from io import BytesIO

def export_to_excel(request):
    # OusurveyLogs 모델의 모든 데이터를 쿼리셋으로 불러옵니다.
    logs_qs = OusurveyLogs.objects.all().values()
    
    # 쿼리셋을 DataFrame으로 변환합니다.
    df = pd.DataFrame(logs_qs)
    
    # BytesIO 객체를 생성하여 메모리에 엑셀 파일을 저장합니다.
    excel_file = BytesIO()
    df.to_excel(excel_file, index=False, engine='openpyxl')
    
    # 파일 포인터를 시작 위치로 이동시킵니다.
    excel_file.seek(0)
    
    # HTTP 응답을 생성하고, 적절한 컨텐트 타입을 설정합니다.
    response = HttpResponse(excel_file.read(), content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
    
    # 메모리 버퍼를 닫습니다.
    excel_file.close()
    
    # 다운로드될 파일의 이름을 지정합니다.
    response['Content-Disposition'] = 'attachment; filename="OusurveyLogs.xlsx"'
    
    return response
728x90
반응형

댓글