728x90
반응형
사용할 DB는 코끼리..가 아니라 PostgreSQL이다
이전글인
과 반대로 오늘은 CSV를 DB에 입력하는 방법에 대해 알아보려고 한다.
가장 쉽게 줄인 코드는 아래와 같다.
@transaction.atomic
def 함수명(request):
CSV 변수1 = request.FILES.get("Input의 name")
with transaction.atomic():
try:
dict_reader = DictReader(codecs.iterdecode(CSV 변수1, 'utf-8'))
list_of_dict = list(dict_reader)
model_instances = [모델명(
칼럼1=record['칼럼1'],
칼럼2=record['칼럼2'],
...
...
) for record in list_of_dict]
모델명.objects.bulk_create(model_instances)
성공 처리
except:
예외 처리
return 각자 알맞는 return방법
여기서 조금 헷갈릴 수 있는 것은 아래일텐데
CSV 변수1 = request.FILES.get("Input의 name")
보통 사용자가 화면에서 파일찾기 같은 버튼을 통해서 자신의 디렉토리에서 파일을 찾고 업로드하는데
이는 가장 기본적으로 HTML에서 input으로 구현할 수 있고
이 Input의 이름을 적으라는 것이다.
예를 들어 아래와 같은 input이다.
<input id="ID명" type="file" name="이름" >
앞단에서 파이썬 소스로 어떻게든 전송을 했다면 저 input에 올린 파일이 같이 갔을텐데
파이썬 소스에서는 저 이름을 보고 csv를 읽고 읽은 내용을 Django 모델이 읽을 수 있게 변환한 뒤
입력해주는 것이다.
여기서 쿼리를 여러번 날리는 것이 아니라 Bulk로 처리하는 것이 중요포인트!
모델명.objects.bulk_create(model_instances)
응용을 하고 싶을 수 있다.
뭐 예를 들어 db에 있는 값이면 수정을 하고, 없는 값이면 입력을 하는 것.
편리성만 따진다면 알아서 넣어주니 좋고 risk를 본다면 데이터가 다 overwritten 되니 위험할 수 있다.
아무튼
이 기능은 Python의 버전이 4.1보다 높으면 내장되어있는 기능이 있어 매우 쉽게 할 수 있고
4.1보다 낮으면 라이브러리를 다운받고 소스를 조금 수정해서 조금 번거로운데 두가지 방법 모두 다음에 다뤄보겠다.
728x90
반응형
'개발자 전향 프로젝트' 카테고리의 다른 글
ajax로 JSON 객체 배열 넘기기 (파이썬 장고) (0) | 2023.12.20 |
---|---|
ajax 로딩 시 로딩 중 표시하는 방법 (jQuery Loading Spinner) (0) | 2023.12.20 |
(파이썬 장고) DB 테이블 CSV 로 출력하기 (0) | 2023.11.18 |
SonarQube 사용법 (Windows) (0) | 2023.07.20 |
로컬 컨테이너에 백업 DB 구축하기 (feat. Docker, Postgre) (0) | 2023.07.15 |