2009-05-11 5 views
5

파이썬에서 생성 된 대용량 데이터 집합을 장고 모델에 저장하고 싶습니다. 내 생각은 데이터를 문자열로 pickleing하여 내 모델의 FileField에 업로드하는 것이 었습니다. 내 장고 모델은 다음과 같습니다 fileupload_to 매개 변수로 정의 된 경로를 보존에 내가 somedata를 저장하는 마지막 줄을 수정하는 방법어떻게 절인 된 데이터를 장고 FileField에 업로드하나요?

import random, pickle 

data_entry = Data(label="somedata") 
somedata = [random.random() for i in range(10000)] 
# Next line does NOT work 
#data_entry.file.save(filename, pickle.dumps(somedata)) 

:

내 파이썬 프로그램에서
#models.py 
from django.db import models 

class Data(models.Model): 
    label = models.CharField(max_length=30) 
    file = models.FileField(upload_to="data") 

다음 작업을 수행 할 싶습니다 ?

+0

우리는 분명히 다음과 같이 말하고 있습니다. 사용자가 피클을 업로드하는 것을 말하는 것이 아닙니다. 맞습니까? 그것은 매우 위험 할 것입니다. –

+0

아니오, 전혀 아닙니다. 아이디어는 서버에서 데이터를 생성 한 다음 데이터베이스에 추가하는 것입니다. 사용자는 데이터를 생성하는 데 사용 된 모델의 매개 변수 (위의 예에서 임의의 숫자 범위) 만 수정할 수 있습니다. 이 의미에서 그것은 실제 "업로드"가 아니지만 어쨌든 장고가 경로를 관리하고 싶으면 (새로운 디렉토리를 만들고 중복을 피하십시오). – btel

답변

-2

참고 : 다른 답변 아래 설명 참조 - 오래된 정보를 제거 깨진 링크 (한번 허용 대답을 삭제할 수 없습니다).

Marty Alchin은 Pro Django 3 장, review here에 대한 섹션을 제공합니다.

+0

내가 틀리지 않는 한, 책이 더 이상 무료로 제공되지 않는 것으로 보입니다. – DanH

+0

그것은 단지 섹션이었습니다. amazon.com에 대한 미리보기가 있습니다. - 마티에게 정말로 열심히 일하기를 원하지 않는다면 : http://www.ittelkom.ac.id/staf/kms/TOT%20Phython/Pro_Django.pdf –

+0

이것은 사이트는 홍보용이 아닌 답변입니다. 이 대답은 쓸모가 없다. –

0

데이터 필드에 데이터를 저장하는 것이 더 좋지 않을 수 있습니다. 파일 업로드가 아닙니다.

+2

데이터가 상당히 클 수 있으므로 데이터베이스에 저장하지 않는 것이 좋습니다. – btel

1

데이터베이스에 파일 속성은 파일의 경로 일뿐입니다. 따라서 실제 업로드를 수행하지 않으므로 파일을 디스크에 저장 한 다음 데이터베이스에 저장해야합니다.

f = open(filename, 'w') 
pickle.dump(somedata, f) 
f.close() 
data_entry.file=filename 
data_entry.save() 
+0

답변 주셔서 감사합니다! 문제는 여전히 FileField를 사용하여 경로를 생성하고 디렉토리를 생성하고 싶습니다. – btel

0

내가 이런 짓을하지 않지만, 관련 코드의 비트를 읽고에 따라 적이, 내가 django.core.files.base.ContentFile의 인스턴스를 생성에보고 지정하여 시작 했죠과 필드의 값. 질문에 대한 답변을 바탕으로

9

나는 다음과 같은 해결책을했다 :

from django.core.files.base import ContentFile 
import pickle 

content = pickle.dumps(somedata) 
fid = ContentFile(content) 
data_entry.file.save(filename, fid) 
fid.close() 

을 그것의 모든 서버 측에서 수행되며 사용자가 피클을 업로드 할 수 없습니다. 나는 그것을 테스트하고 다 잘 작동하지만, 나는 어떤 제안에 열려 있습니다.

+0

이것이 내가 추천 한 것입니다. –