팀 프로젝트 하면서 작성했던 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()