반응형
가끔씩 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을 사용한지 궁금하신 분은 아래에서 확인하세요~
반응형
'Django' 카테고리의 다른 글
Django에서 memcached 사용하기 (우분투, 윈도우) (0) | 2020.06.17 |
---|---|
[CRITICAL] WORKER TIMEOUT (pid:00000) (0) | 2020.05.27 |
Out of range value for column (SQLite is working but MySQL is not working) (0) | 2020.05.18 |
파일 삭제하면 미디어 폴더에서도 파일 삭제하기 (0) | 2020.04.14 |
Django란? #Python #웹 프레임워크 (0) | 2020.04.09 |
댓글