db_uploader.py

양희연·2020년 6월 29일
1

Python

목록 보기
10/10
post-thumbnail

크롤링 해서 작성된 csv 파일을 DB에 넣어보자 👊

#필요한 모듈을 import
import os
import django
import csv
import sys

#장고 내부(views.py, models.py)가 아닌 외부 파이썬 파일에서 작업
#이 파일이 장고에 적용될 수 있도록 설정하는 코드
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '프로젝트명.settings')
django.setup()

#모델 import
from product.models import (

)

CSV_PATH_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:
        print(row)



> models.py

from django.db import models

class Menu(models.Model):
    name = models.CharField(max_length=10)

class Category(models.Model):
    name = models.CharField(max_length=50)
    menu = models.ForeignKey('Menu', on_delete=models.SET_NULL, null=True)

class Drink(models.Model):
    name = models.CharField(max_length=10)
    menu = models.ForeignKey('Menu', on_delete=models.SET_NULL, null=True)
    category = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True)

> db_uploader.py

import os
import django
import csv
import sys

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'starbucks.settings')
django.setup()

from product.models import (
    Menu,
    Category,
    Drink
)

CSV_PATH_PRODUCTS = './products.csv'

def insert_menu():
    with open(CSV_PATH_PRODUCTS) as in_file:
        data_reader = csv.reader(in_file)
        next(data_reader, None)
        for row in data_reader:
	    if row[0]:
                menu_name = row[0]
                if not Menu.objects.filter(name = menu_name).exists():
                    Menu.objects.create(name = menu_name)

def insert_category():
    with open(CSV_PATH_PRODUCTS) as in_file:
        data_reader = csv.reader(in_file)
        next(data_reader, None)
        for row in data_reader:
	    if row[0]:
                menu_name = row[0]
                menu_id = Menu.objects.get(name = menu_name).id

	    category_name = row[1]
	    if not Category.objects.filter(
                name = category_name,
                menu_id = menu_id
	    ).exists():
                Category.objects.create(
                    name = category_name,
                    menu_id = menu_id
                )

def insert_drink():
    with open(CSV_PATH_PRODUCTS) as in_file:
        data_reader = csv.reader(in_file)
        next(data_reader, None)
        for row in data_reader:
	    if row[0]:
            menu_name = row[0]
            menu_id = Menu.objects.get(name = menu_name).id

            category_name = row[1]
            category_id = Category.objects.get(name = category_name).id

            drinks = row[2].split(',')
            for drink in drinks:
                if drink:
                    if not Drink.objects.filter(
                        name = drink,
                        menu_id = menu_id,
                        category_id = category_id
                    ).exists():
                        Drink.objects.create(
                            name = drink,
                            menu_id = menu_id,
                            category_id = category_id
                        )

insert_menu()
insert_category()
insert_drink()
				
profile
꾸준히 나아가자!

0개의 댓글