위와같은 엑셀파일을 Django ORM을 이용해서 insert 하고자한다.
소스코드
import openpyxl
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "subul.settings")
django.setup()
from order.models import Order
from core.models import Location
from product.models import ProductCode
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "subul.settings")
django.setup()
위의 3코드는 Django의 설정파일을 set해주고 django.setup()으로 django를 실행한다고 생각하면 편하겠다
wb = openpyxl.load_workbook('productOrder.xlsx') # productOrder.xlsx 파일을 열어서 wb 변수에 할당
sheet1 = wb['Sheet1'] # 엑셀의 Sheet1을 open
rows = sheet1['A3':'L310'] # sheet1의 A3부터 L310까지 rows 변수에 할당
for row in rows:
# rows는 여러줄이니 row는 한줄
# row[0]은 가로 한줄의 제일 첫번째 세로칸 즉 A3,B3.... L3
dict = {}
dict['id'] = row[0].value
dict['type'] = row[1].value
dict['specialTag'] = row[2].value
dict['ymd'] = row[3].value
dict['orderLocationName'] = row[5].value
dict['codeName'] = row[6].value
dict['amount'] = row[7].value
dict['count'] = row[8].value
dict['price'] = row[10].value
dict['memo'] = row[11].value
product_Instance = ProductCode.objects.get(codeName=dict['codeName'])
toLocation_instance = Location.objects.filter(codeName=dict['orderLocationName']).filter(type='05').first()
dict['code'] = product_Instance.code
dict['productCode'] = product_Instance
dict['orderLocationCode'] = toLocation_instance
Order(**dict).save() # 킬링포인트 **딕셔너리를 활용해서 쉽게 insert
'python' 카테고리의 다른 글
파이썬 데코레이터 활용(로깅) (1) | 2021.09.02 |
---|---|
python oracle 데이터 json serialize(django) (0) | 2020.02.25 |
python super (0) | 2019.12.26 |
python 메모리 관리(memory allocation) (4) | 2019.11.15 |
클래스 관계 IS-A 상속 (0) | 2019.11.07 |