#16 Python - CSV

박종규·2021년 8월 8일
0

TIL

목록 보기
17/22

python에서 로컬 DB에 데이터를 넣을 때,
Postman, zshell을 이용해서 하나하나 넣어줬었다.

하지만 처리해야하는 데이터량이 많아지면
데이터를 한번에 등록할 수 있는 방법이 필요했다.

아래와 같이 csv read-create 방법을 이용할 경우 한꺼번에 많은 데이터를 등록할 수 있고,

또 다른 백엔드 개발자가 로컬 DB에 동일한 정보를 빠르게 등록할 수 있다.

import os
import django
import csv

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

from products.models import *

CSV_PATH_LOCATION1 = "brand.csv"
CSV_PATH_LOCATION2 = "type.csv"
CSV_PATH_LOCATION3 = "product.csv"
CSV_PATH_LOCATION4 = "option.csv"

def insert_brand():
    with open(CSV_PATH_LOCATION1) as in_file:
        data_reader = csv.reader(in_file)
        next(data_reader, None)
        for row in data_reader:
            Brand.objects.create(
                name  = row[0],
                image = row[1]
            )

def insert_type():
    with open(CSV_PATH_LOCATION2) as in_file:
        data_reader = csv.reader(in_file)
        next(data_reader, None)
        for row in data_reader:
            Type.objects.create(
                name  = row[0]
            )

def insert_product():
    with open(CSV_PATH_LOCATION3) as in_file:
        data_reader = csv.reader(in_file)
        next(data_reader, None)
        for row in data_reader:
            brand = Brand.objects.get(name=row[2])
            type  = Type.objects.get(name=row[3])

            Product.objects.create(
                name  = row[0],
                price = row[1],
                brand = brand,
                type  = type,
                like_number = int(row[4]),
                thumbnail = row[5],
                detail_image = row[6],
                element = row[7],
                weight = row[8]
            )

def insert_option():
    with open(CSV_PATH_LOCATION4) as in_file:
        data_reader = csv.reader(in_file)
        next(data_reader, None)
        for row in data_reader:
            Option.objects.create(
                name  = row[0]
            )

insert_brand()
insert_type()
insert_product()
insert_option()
  • 데이터를 등록하는 순서를 Top-down으로 구성해야 에러를 피할 수 있다.
  • Numbers에서는 csv 내보내기를 이용해서 파일을 만들어야 한다. 윈도우에서는 확장자명만 .csv로 하면 된다.

0개의 댓글