python, djnago 를 이용해서 csv로 만든 파일을 데이터 베이스에 입력하는 방법을 연습하기로 했다.
프로젝트를 진행하다 보면 아직 연습하는 단계인 사람들이 모여서 하다보니 최악의 경우 데이터베이스를 DROP하고 다시 만들어서 사용하는 경우도 더러 있다고했다.
그럴때 마다 shell에 들어가서 수작업으로 입력하는 것도 시간 낭비가 될것이고 파일로만들어 백업해뒀다가 uploader를 만들어뒀다가 양식에 맞는 데이터를 큰 어려움 없이 추가입력 할수있다는 점에서 csv파일을 읽어와 데이터 베이스에 넣는 방법을 배우게 되었다.
일단 python shell 에서 쿼리 명령어로 직접 코드를 작성해서 입력해보는 방식으로 작업을 해야 하는데
처음 하는 것이라 익숙치 않은 것도 있지만 바로 눈에 보이는게 아니고 쿼리셋으로 값을 반환받았을때 어떤의미인지 이해하고 해석하는 과정이 필요한 점도 어렵게 다가왔다.
CSV_PATH_PRODUCTS='./products.csv'
with open (CSV_PATH_PRODUCTS) as in_file:
data_reader=csv.reader(in_file)
next(data_reader,None)
for row in data_reader:
if not Category.objects.filter(name=row[7]).exists():
Category.objects.create(name=row[7])
CSV_PATH_PRODUCTS='./products.csv'
with open (CSV_PATH_PRODUCTS) as in_file:
data_reader=csv.reader(in_file)
next(data_reader,None)
for row in data_reader:
Product.objects.create(
korean_name=row[0],
english_name=row[1],
thumbnail_image_url=row[2],
price=row[3],
vegan_or_not=row[4],
sugar_level=row[5],
description=row[6],
category=Category.objects.get(name=row[7])
)
if not Category.objects.filter(name=row[7]).exists():
Category.objects.create(name=row[7])
Category 라고하는 데이터 테이블에 중복되는 이름이 없으면 추가하는 방식 그렇기 때문에 중복되는 카테고리 명 없이 테이블이 생성됨
category=Category.objects.get(name=row[7])
카테고리에서 내가 불러온 데이터의 이름과 일치하는 데이터의 ID를 다져와 카테고리에 저장
위와같은 방식으로 get으로는 하나의 객체를 가져와 입력하고
filter로는 쿼리셋을 불러와 하나씩 꺼내서 저장하는 방식으로 입력했다.
uploader를 하나로 만들고 여러 csv파일을 데이터 베이스에 넣을떄 사용하는 방식으로 진행했다.
쉬운 것은 단 하나도없다. 익숙해 지는 시간이 지나면 숨쉬듯 편해질 일들이라 믿고 배워가기로했다.
'First step > web depeloper step1' 카테고리의 다른 글
Dr Jart 클론 프로젝트 간 새롭게 사용한 것 (0) | 2021.12.07 |
---|---|
RESTful API (0) | 2021.12.03 |
관계형 데이터 모델링 (0) | 2021.11.28 |
decorator 를 이해해보자 (0) | 2021.11.28 |
[django]JWT가 뭘까 (0) | 2021.11.24 |