2020.05.18 딕셔너리로 넣기 업데이트
데이터 넣는 방법
두가지 방법이 있다 .
엑셀에 쌓으면서 동시에 데이터베이스에 저장을 한다.
엑셀에 저장되어있는것을 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()
데이터가 뿌려지는것을 볼 수 있다.
bulk_create 를 실행하는데 몇가지 점을 고려해야한다.
django.db.utils.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails...
위에는 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'],
)