장고, 파이썬 csv 파일 처리 방법

2022. 2. 1. 20:50·Django

장고 모델링을 통해 데이터베이스를 생성했다면, 파이썬에서 제공하는 csv 모듈을 사용하여 데이터를 저장할 수 있습니다. 이를 위해서는 먼저, csv 파일을 모델링 양식을 따라 생성하고 스크립트를 통해 데이터베이스에 추가하는 과정을 거쳐야 합니다.

1. csv 파일 생성 방법

csv 파일은 콤마로 구분되는 값(Comma Seperated Value, CSV)으로 구성되며, 다양한 방식으로 생성할 수 있습니다. 사용하는 에디터에서 csv 확장자를 갖는 파일을 직접 생성할 수도 있고, 노션이나 구글 스프레드시트를 통해 데이터를 추가하고 다운받을 수도 있습니다. 중요한 것은 장고 모델링을 통해 만든 모델의 양식을 준수해야 한다는 것입니다.

 

이번 포스팅에 사용하기 위해 제가 작성한 SubCategory 모델은 다음과 같습니다.

class SubCategory(Base):
    name          = models.CharField(max_length=200, blank=True)
    description   = models.TextField()
    main_category = models.ForeignKey(MainCategory, on_delete=models.CASCADE)

    class Meta:
        db_table = 'sub_categories'

아래 스크린샷은 위 모델의 양식에 맞춰 구글 스프레드 시트에서 작성하고 다운로드한 csv 파일입니다. 제품 카테고리의 이름, 설명, 카테고리 ID의 순서대로 해당하는 데이터가 차례로 담겨 있습니다. 1번 행의 name, description, main_category_id는 테이블 헤더에 해당하며, 2번 부터가 데이터베이스에 저장될 내용들입니다. 각 데이터의 구분은 쉼표(,)를 기준으로 합니다.

데이터베이스에 추가할 csv 내 데이터

2. csv 파일 데이터베이스 추가 방법

이제 csv 파일을 데이터베이스에 추가할 차례입니다. 새로운 파이썬 파일을 하나 생성하고, csv 모듈을 임포트합니다. 이 때, 파이썬 파일의 위치는 프로젝트 최상단 디렉토리(manage.py가 있는 곳)어야 합니다.

import csv
import os
import django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wesop.settings")
django.setup()

from products.models import SubCategory

with open('Wesop Data - sub_categories.csv') as csv_file_sub_categories:
    rows = csv.reader(csv_file_sub_categories)
    next(rows, None)
    for row in rows:
        SubCategory.objects.create(
            name = row[0],
            description = row[1],
            main_category_id = int(row[2])
        )
        print(row)

코드를 하나씩 살펴보겠습니다. 가장 처음의 import는 사용할 모듈들을 불러오는 것이며, os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wesop.settings")는 장고의 세팅을 진행하는 부분입니다.

 

from products.models import SubCategory는 기존에 생성했던 모델로 데이터베이스 연동 작업을 진행하기 위한 것입니다. 따라서 모델에서 지정한 max_length, ForeignKey와 같은 속성들의 규칙을 만족하지 않는 경우 오류가 발생하게 됩니다.

이후의 코드는 csv 모듈을 사용하여 csv 파일을 읽는 과정입니다. next(rows, None)은 csv 파일의 첫번째 행인 테이블 헤더를 제외하고 추가하겠다는 의미입니다.

 

마지막으로 csv 파일을 불러온 다음 for문을 통해 한 행씩 순회하며 데이터베이스에 추가(create) 작업을 진행합니다. 첫 번째 행의 첫 번째 요소(row[0])가 name에 들어가고, 두 번째 요소(row[1])가 description에, 세 번째 요소(row[2])가 외래키에 들어갑니다. 외래키의 경우에는 정수의 형태로 추가되어야 하므로, int(row[2])로 처리해줍니다. csv 데이터의 기본 유형은 스트링입니다.

 

추가적으로, 불리언 값을 처리해야 할 때가 종종 있을 수 있습니다. 이 때는 import json을 통해 모듈을 불러온 다음, 다음과 같이 json.loads를 활용할 수 있습니다.

is_verified = json.loads(row[3].lower())

3. 데이터베이스 확인

터미널에서 작성한 파이썬 파일을 실행합니다. 마지막 print(row)를 통해 추가되는 데이터가 터미널 창에 표시될 것입니다.

이상없이 파이썬 파일이 실행되었다면 이제 mysql을 열어 데이터베이스를 확인해봅니다. 다음과 같이 정상적으로 데이터베이스에 csv 파일 데이터가 추가되었다면 성공입니다!

데이터베이스에 성공적으로 추가된 csv 데이터

반응형

'Django' 카테고리의 다른 글

장고에서 HTTP GET, POST 요청 처리하는 방법  (0) 2022.02.20
장고 ORM과 쿼리셋의 개념  (0) 2022.02.07
장고 프론트엔드와 통신 방법: HTTP POST, GET request 처리하기  (0) 2022.01.28
장고 추상 모델 클래스 생성과 상속 방법  (0) 2022.01.21
장고 암호화 인증 인가 처리: bcrypt, JWT 사용 방법  (0) 2022.01.19
'Django' 카테고리의 다른 글
  • 장고에서 HTTP GET, POST 요청 처리하는 방법
  • 장고 ORM과 쿼리셋의 개념
  • 장고 프론트엔드와 통신 방법: HTTP POST, GET request 처리하기
  • 장고 추상 모델 클래스 생성과 상속 방법
휘 Hwi
휘 Hwi
개발자 성장 로그
  • 휘 Hwi
    개발자 로그: 변화를 위한 공간
    휘 Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기 (61)
      • 101 (1)
      • Web | Internet (4)
      • HTML | CSS (4)
      • Python (9)
      • Django (20)
      • Javascript (0)
      • Node.js (0)
      • React (0)
      • React Native (0)
      • Database (1)
      • Git (1)
      • Terminal | Vim (1)
      • Auth | Security (4)
      • AWS (0)
      • Docker (0)
      • Kubernetest (1)
      • Deployment (1)
      • Project (2)
      • TIL (12)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    깃 퍼블릭 키 등록
    요소 절대 크기
    새 탭에서 열기
    함수
    target="_blank"
    파이썬
    파라미터
    HTTP
    HTTP GET 요청
    정규 표현식
    깃
    깃 에러 해결
    JWT 디코딩
    깃 ssh
    요소 크기 설정
    장고 URL
    장고 프로젝트
    JWT 인코딩
    탭내빙
    프로젝트 회고
    배포
    JWT
    요소 상대 크기
    html
    TIL
    깃 오류
    HTTP POST 요청
    장고 Views
    장고
    css
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
휘 Hwi
장고, 파이썬 csv 파일 처리 방법
상단으로

티스토리툴바