장고 모델링을 통해 데이터베이스를 생성했다면, 파이썬에서 제공하는 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번 부터가 데이터베이스에 저장될 내용들입니다. 각 데이터의 구분은 쉼표(,
)를 기준으로 합니다.
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 파일 데이터가 추가되었다면 성공입니다!
'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 |