TIL[73].csv파일 Mysql에 dump하기

jake.log·2020년 9월 20일
0

1. django ORM


data를 다룰 때 보통 SQL을 사용한다. SQL(Structured Query Language)은 말그대로 구조화된 쿼리문인데, 관계형 database를 CRUD할 때 사용된다. MySQL도 SQL 언어이다.

django에는 객체의 관계를 연결해주는 ORM(Object/Realational/Mapper)기능이 있는데 ORM은 python을 database로 변환해주는 역할을 한다.
앞서말한 SQL 문이 없어도 database의 data를 객체 지향 방법을 통해 조금 더 편리하게 다룰 수 있다.

django의 models.py 에서 class를 만들어 테이블 객체를 만들고 이 객체에 여러 row의 data를 CRUD 할 수 있다.

예를 들어 User.objects.create(name = name) 과 같이 python에서 명령하면

name이라는 row가 생성된다.

이처럼 ORM은 파이썬에서 바로 빠르게 사용이 가능하여 생산적이다. SQL에서 직접적으로 하나씩 입력해야하는 것들을 빠르게 처리할 수 있고, 유지보수가 편리하다.

그러나 database에 대한 정확한 이해가 없으면 원리를 이해하기 쉽지 않고, 문제 대처능력이 떨어질 수 있다. 따라서 SQL 쿼리문은 꼭 배워두도록 하자.


2.CSV 파일 dump 하기.


CSV 파일은 mysql database에 dump하는데 ORM이야기를 한 이유는 ORM에 대한 개념이해와 models.py를 어떻게 사용하는지 알아야 dump도 가능하기 때문이다.

csv 파일은 (,)로 이루어진 row 표 형태로 이루어진 파일로서, 크롤링한 자료를 database로 한번에 옮길 수 있어 유용하다.

프로젝트를 진행하면서 크롤링한 파일들중 products 파일을 dump 한 코드는 다음과 같다.

import os 
import django 
import csv 
import sys 

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

from products.models import Product

CSV_PATH_PRODUCTS = './logitech_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 row[0:10]:

            product_banner = row[0]
            product_teaser = row[1]
            product_key_feature  = row[2]
            product_title        = row[3]
            product_details      = row[4]
            product_price        = row[5]
            product_note         = row[6]
            additional_feature   = row[7]
            specs_details        = row[8]
            recommended_products = row[9]
            category             = row[10]
            
            Product.objects.create(
                product_banner       = product_banner.strip(),
                product_teaser       = product_teaser.strip(),
                product_key_feature  = product_key_feature.strip(),
                product_title        = product_title.strip(), 
                product_details      = product_details.strip(), 
                product_price        = product_price.strip(), 
                product_note         = product_note.strip(), 
                additional_feature   = additional_feature.strip(), 
                specs_details        = specs_details.strip(), 
                recommended_products = recommended_products.strip(),
                category_id          = category.strip(),
                )

크롤링한 logitech 상품 페이지 테이블은 총 10가지로, 각각의 상품 상세페이지에서 필요한 data들을 모았다. models.py에 있는 Pruduct 클래스를 import 하고 데이터를 열어 =, csv 파일 안에 있는 각각의 row를 객체화 시켜 Product 클래스에 연결이 되었고, Product 클래스는 mysql에 있는 products table로 해당 자료들을 옮겨주는 역할을 했다.

아직 크롤링이나 csv 파일 dump가 100% 이해가 되지는 않는다.
MySQL 쿼리셋문과 data에 대한 이해를 좀 더 높여 django ORM을 수월하게 쓰기까지 많은 연습이 필요하다.

profile
꾸준히!

0개의 댓글