TIL 39 | Create Data with CSV
프로젝트를 진행하면서 Database를 생성하고 웹사이트의 각종 기능을 구현하다 보니 Modeling한 DB에 편하게 Data를 입력할 필요성을 느끼게 되었다. Python이 어떻게 외부 파일을 다루고, CSV 형태의 데이터를 어떻게 데이터베이스에 입력하는지 간단하게 알아보좌.
CSV Data
CSV(Comma Seperated Value) 데이터란 말 그대로 쉼표를 기준으로 항목을 구분하여 저장하는 데이터를 말한다. 주로 테이블 형태로 구성된 자료나 텍스트 자료를 저장할 때 사용한다. 데이터의 크기가 작고, 많은 애플리케이션에서 활용할 수 있는 범용 형식이기 때문에 자료를 주고 받아야 하는 다양한 상황에서 CSV형식을 사용한다.
Read CSV With Python
Python으로 CSV를 읽는 방법을 살펴보자. 먼저 아래와 같이 엑셀형태로 데이터를 저장하거나, 일반 텍스트파일에서 쉼표로 각 요소를 구분하여 .csv
확장자로 저장한다. 아래 파일은 category.csv
이다.
# db_uploader.py
import os
import django
import csv
import sys
# 외부 Python 파일의 내용이 Django에 적용될 수 있도록 설정을 바꿔준다.
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "motemote.settings")
django.setup()
# Django Model을 불러온다.
from products.models import *
# CSV 파일 경로를 변수화하여 저장한다.
CSV_PATH_PRODUCTS = './category.csv'
# with open 이라는 파이썬 내장 모듈을 이용하여 외부 파일을 연 상태로 작업한다.
with open(CSV_PATH_PRODUCTS) as in_file:
# csv.reader 메소드를 이용해 파일 내부의 모든 행을 list화 해준다.
data_reader = csv.reader(in_file)
# csv 파일의 첫번째 줄을 무시해준다.
next(data_reader, None)
for row in data_reader:
# row[0] = product_name
if row[0]:
product = Product.objects.create(name = row[0])
# row[1] = category_name
if row[1]:
Category.objects.create(name = row[1], product_id = product.id)
위와 같이 csv의 데이터를 나의 Database Table에 저장할 수 있다. 그 후에 작성한 db_uploader.py
를 실행하여 Data를 생성한다.
python3 db_uploader.py
WeeteWeete Products Data
같은 방식으로 Color, Concept, Item, Image를 csv 파일로 작성한 후 db_uploader.py
에서 Query Method를 이용해 Data를 생성해주었다.
-
concept.csv
-
item.csv
item.csv
의 경우 category, concept, option 등 중복되는 id값은 공백으로 처리해도 되지만, 실제로 간단해보이는 이 작업들이 생각보다 오래 걸렸고, 시행착오가 많았기에 우선 확실하게 하기 위해 전부 채워넣었다. 이렇게 해도 Shell에서 직접 입력하는것보단 빠르니.. 조금씩 익숙해지면,,,
식으로 필요없는 데이터들은 지울 생각이다.
내 생각보다 CSV file을 활용하는 데 시간이 오래걸려버렸지만.. 앞으로 활용하기에 따라 Data 관리가 매우 수월해질 것 같다. 기능 구현이 제대로 작동하는지 알기 위해 억지로 데이터를 shell로 집어넣었었는데, 이제 그럴일 없이 csv를 이용해야겠다.
Author And Source
이 문제에 관하여(TIL 39 | Create Data with CSV), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hkja0111/TIL-39-Create-Data-with-CSV저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)