Django
CSV Uploader
traveler_JH
2022. 7. 6. 22:35
팀 프로젝트중 데이터를 엑셀로 CSV로 우선 작성후 DB로 옮기는 중 Workbench이외에 다른방법으로 DB uploader를 제작해보았다.
import os
import django
import csv
import sys
# system setup
os.chdir('.')
print('Current dir의 경로 : ', end=''), print(os.getcwd()) # os가 파악한 현재 경로를 표기
print('os.path.abspath(__file__)의 경로 : ',os.path.abspath(__file__)) # 현재 작업중인 파일을 포함 경로를 구체적으로 표기
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print('BASE_DIR=', end=''), print(BASE_DIR)
print('똑같나? 다르나?', BASE_DIR == os.getcwd()) # 소문자 c , 대문자 C 차이 때문인것 같네요.
sys.path.append(BASE_DIR) # sys 모듈은 파이썬을 설치할 때 함께 설치되는 라이브러리 모듈이다. sys에 대해서는 뒤에서 자세하게 다룰 것이다. 이 sys 모듈을 사용하면 파이썬 라이브러리가 설치되어 있는 디렉터리를 확인할 수 있다.
os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'westarbucks.settings')
# python이 실행될 때 DJANGO_SETTINGS_MODULE라는 환경 변수에
# 현재 프로젝트의 settings.py 파일 경로를 등록
django.setup() # python manage.py shell 을 실행하는 것이랑 비슷한 방법이다. 즉 파이썬 파일에서도 django를 실행 시킬수 있다.
# import model
from products.models import *
# insert data while reading csv file into table
CSV_PATH = './csv/wecode.csv'
# open csv file and insert row data in MySQL
# Menu Table
def insert_menu():
with open(CSV_PATH, newline='', encoding='utf8') as csvfile:
data_reader = csv.DictReader(csvfile)
for row in data_reader:
if not Menu.objects.filter(name=row['menu']).exists():
menu_id = Menu.objects.create(
name = row['menu'] )
print('MENU DATA UPLOADED SUCCESSFULY!')
def insert_category():
with open(CSV_PATH, newline='', encoding='utf8') as csvfile:
data_reader = csv.DictReader(csvfile)
for row in data_reader:
if not Category.objects.filter(name=row['category']).exists():
menu_id = Menu.objects.get(name=row['menu'])
Category.objects.create(
name = row['category'],
menu = menu_id,
)
print('CATEGORY DATA UPLOADED SUCCESSFULY!')
def insert_products():
with open(CSV_PATH, newline='', encoding='utf8') as csvfile:
data_reader = csv.DictReader(csvfile)
for row in data_reader:
category_id = Category.objects.get(name=row['category'])
products = row['product'].split(',')
if not Product.objects.filter(name=row['product'],
category=category_id).exists():
Product.objects.create(name=row['product'] if row['product'] else category_id.name,
price=row['price'],
category = category_id,)
print('PRODUCT DATA UPLOADED SUCCESSFULY!')
insert_menu()
insert_category()
insert_products()