우선 data_insert.py를 생성하고 다음과 코드를 작성해준다.
import csv
import os
import django
import sys
sys.path.append(os.getcwd())
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "[프로젝트 명].settings")
django.setup()
from color.models import Color
with open('./color_data.csv', newline='') as data:
data_reader = csv.DictReader(data)
for row in data_reader:
Color.objects.create(
color_1 = row['color_1'],
color_2 = row['color_2'],
color_3 = row['color_3'],
color_4 = row['color_4'],
)
하나하나씩 살펴보자
os 모듈은 운영체제에서 제공되는 기본적인 기능을 제공하는 모듈이다.
os.getcwd()는 현재 작업하고 디렉터리의 위치를 가져온다. 이 경로를 sys.path에 추가해준다.
os.environ은 사용자의 환경변수의 dictionary의 리스트를 가지고 있다. 그 중에서 DJANGO_SETTINGS_MODULE의 값을 현재 작업중인 프로젝트의 설정으로 매핑해준다.
DJANGO_SETTINGS_MODULE : django의 설정 값을 가지고 있는 환경변수이다.
[프로젝트명].settings : 프로젝트의 설정 파일이다.
django 공식문서에서는 django.setup() 메소드를 호출하는 것은 'standalone'한 파일을 작업할때 필요하다고 한다. 'standalone'은 '독립된'이라는 뜻을 가지고 있다. django에서 말하는 standalone이란 환경은, django 기능의 일부분이 필요한 환경을 얘기한다. 예를들어 python 파일을 작성중 django template을 사용해 페이지를 렌더링해야한다거나, django orm만 사용해 데이터를 fetch 해야하는 환경에서는 django.setup() 메소드를 통해 django의 일부분을 사용할 수 있다.
정리하자면, csv 파일 데이터를 읽어 django 프로젝트의 mysql로 데이터를 삽입해야 하는 경우 나는django와 무관한 독립된 python 파일(data_insert.py)에서 작업을 하고 있고 이 파일에서 필요한 기능은 django 전체가 아닌 django orm이므로, django.setup() 메소드를 사용해준다.
우리는 이제 os.environ.setdefault 메소드를 통해 세팅된 프로젝트의 설정정보들을 가져왔고, 마지막으로 django.setup() 메소드를 실행시켜 프로젝트의 실제 model들을 가져올 수 있다.
데이터를 삽입하고자 하는 모델을 import 해준다.
csv 파일의 경로를 열어 csv.DictReader()를 통해 csv파일을 읽어들인다. 그 이후 csv 파일의 row의 개수만큼 for문을 돌려 objects.create() 구문을 통해 object를 생성해주면 된다.
오늘도 한 수 배워갑니다 센세