본문 바로가기
Django

request로 전송받은 csv file 바로 읽고 데이터베이스 저장

by Django_ 2020. 5. 11.
반응형

가끔씩 csv나 엑셀 등의 내용을 DB에 넣어야 하는 경우가 존재합니다.

다들 어떻게 하시는지 모르겠지만 저는 로컬에서 테스트를 해본 후 superuser만 접근할 수 있는 페이지 하나를 임시로 만들어서 그냥. csv 파일을 올립니다.

 

특히 foreign key를 사용해 외래 키값을 물고 저장해야 하는 경우가 있을때는 다른 방법은 너무 복잡하고 시간이 많이 걸리는 것 같은 느낌이 있습니다.

# EX
post_obj = Post.objects.create(user=self.user)
Like.objects.create(post=post_obj)

아무래도 프로덕션 환경이라면 배포도 다시 해야 하고 작업 프로세스도 돌아야 하니 시간대를 잘 보고 하시는 게 좋으실 듯합니다. 

 

본론으로 돌아와 전송받은 csv를 읽는 방법입니다.

a b c d
1 2 3 4
5 6 7 8

 

file = self.request.FILES['file']
decoded_file = file.read().decode('utf-8-sig').splitlines()


#리스트 style
reader = csv.reader(decoded_file)
for row in reader:
    print(row)
    
[a,b,c,d]
[0,1,2,3]
[4,5,6,7]

#딕셔너리 style
reader = csv.DictReader(decoded_file)
for row in reader:
    print(row)
    
{a:0, b:1, c:2, d:3}
{a:4, b:5, c:6, d:7}

 

위에 두 예시를 잘 조합하시면 대부분 해결이 되실것같다고 생각이 듭니다~

 

※ 왜 utf-8-sig을 사용한지 궁금하신 분은 아래에서 확인하세요~

 

 

read csv에 \ufeff 가 생길때

python을 활용하여 .csv 파일을 읽는 경우가 상당히 많이 있습니다. csv csv는 쉽게 생각하면 엑셀 및 스프레드시트와 같은 프로그램에서 필수 데이터만 나열한 것이라고 생각하시면 될 것 같습니다. 자세한 사항..

install-django.tistory.com

 

반응형

댓글