bulk_create 데이터 넣기

BackEnd_Ash.log·2020년 3월 5일
0

크롤링

목록 보기
4/7

2020.05.18 딕셔너리로 넣기 업데이트

bulk_create 데이터 넣기

데이터 넣는 방법

  1. insert 로 데이터 넣기
  2. bulk_create 로 데이터 넣기

두가지 방법이 있다 .

1 insert

엑셀에 쌓으면서 동시에 데이터베이스에 저장을 한다.

2 bulk_create

엑셀에 저장되어있는것을 shell 상에서 데이터베이스에 저장을 한다.

>>> import csv
>>> from products.models import *
>>> bulk=[]
>>> with open('./20200229 foodly_recipes.csv') as csv_file:
...     data = csv.reader(csv_file)
...     for row in data:
...             bulk.append(Recipe(title=row[1]))
...
>>> bulk[0].title
'Plum Freezer Jam with Cardamon and Ginger'

>>> for i in range(1,len(bulk)):
...     Recipe.objects.filter(id=i).create(title=bulk[i-1].title)

...Recipe.objects.values()

데이터가 뿌려지는것을 볼 수 있다.

3.bulk_create 사용시 고려할 점들

bulk_create 를 실행하는데 몇가지 점을 고려해야한다.

  • foreignkey 로 연결되어 있는 필드의 데이터는 업로드시 오류가 난다.
    해당 필드는 제외해야한다. 일반 필드 업로드 후 update 기능을 이용해서 foreignkey 도 csv 파일로 업로드 할 수 있다.
django.db.utils.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails...
  • pk 를 지정하지 않으면 마지막 생성 pk 다음 번호부터 생성된다.
    100 개의 데이터를 넣고 지우고 다시 넣으면 101번 부터 생성된다.
    pk 값을 함께 넣어서 실행하면 된다.

딕셔너리로 넣기

위에는 bulk_create 로 넣는 방법이고 다른 방법으로 넣는 방법이 있습니다.

foreign key 에 데이터를 넣기 위해서는 테이블 칼럼명에 "_id" 를 붙여 줘야 넣을 수 있습니다.

import csv
import os
import django

os.environ.setdefault("DJANGO_SETTINGS_MODULE" , "project_name.settings")

from app_name.models import Account

CSV_PATH = " CSV 가 있는 경로.csv"

with open(CSV_PATH , newline = '') as csvfile:
	data_reader = csv.DictReader(csvfile)
	for row in data_reader:
		print(row)
        Account.objects.create(
        	name      = row['name'],
                password  = row['password'],
                nick_name = row['nick_name'],
            )
profile
꾸준함이란 ... ?

0개의 댓글