All Articles

Python - csv 파일 데이터베이스에 넣기

팀 프로젝트 하면서 작성했던 db 업로더 중 기억하고 싶은 코드를 남긴다. 팀원 셋이서 각자 파트를 나눠 업로더를 짰기 때문에 코드 재사용을 염두에 두고 작성했다. 각 테이블별로 함수를 만들어서 테스트가 용이했다.

# ...코드 전략...
def new_product():
  with open(CSV_PATH_NO_DUPLICATED) as in_file:
    data_reader = csv.reader(in_file)
    next(data_reader, None)
    # 상품명 중복을 없애기 위해 조건을 걸고 빈 리스트에 넣었다.
    # distinct() 함수를 쓰면 더 간단하지 않을까.
    product_list = []
      for row in data_reader:
        product_name = row[4]
        if product_name in product_list:
          pass
        else:
          product_list.append(product_name)
          price_name = row[9]
          material_name = row[10]
          material_id = Material.objects.get(name = material_name).id
          country_name = row[11]
          country_id = Country.objects.get(name = country_name).id
          Product.objects.create(name = product_name, price = price_name, material_id = material_id, country_id = country_id)

def new_product_colors():
  with open(CSV_PATH_NO_DUPLICATED) as in_file:
    data_reader = csv.reader(in_file)
    next(data_reader, None)
    for row in data_reader:
      product_number = row[3]
      # color_id
      color_name = row[-1]
      color_id = Color.objects.get(name=color_name).id
      # product_id
      product_name = row[4]
      product_id = Product.objects.get(name=product_name).id
      # discount_price
      # 할인 상품이 아닐 경우 원가를 넣어준다.
      if row[8] == '':
        discount_price = row[9]
      else:
        discount_price = row[8] 
      # detail_thumbnail 추가
      detail_thumbnail = row[7].split(',')[0]

      ProductColor.objects.create(product_number=product_number, color_id=color_id, product_id=product_id, discount_price=discount_price, detail_thumbnail=detail_thumbnail)

# products 테이블 추가
new_product()

# product_colors 테이블 추가
new_product_colors()