2011-08-25 3 views
0

postgres db에 대한 일부 항목에 대한 데이터를 저장하는 djano web app가 있습니다 .db의 데이터를 json file로 복사하려면 일반적으로 python manage.py shell를 사용하고 django 튜토리얼에서 설명한 직렬화 API를 사용하십시오.psycopg2.ProgrammingError, postgres에서 django app의 데이터를 직렬화하기위한 스크립트 실행

>>>python manage.py shell 
... 
In[8]:from myapp.models import MyFirstModel 
In[9]:data = serializers.serialize("xml", MyFirstModel.objects.all()) 
In[10]:print data 

이 출력을 텍스트 파일로 복사하고 json으로 저장하십시오.

이 작업을 수행 할 스크립트를 작성하고

datacopy.py ........

... 
filename = os.path.join(dirpath,basefilename+".json") 

def write_data_to_file(): 
    from django.core import serializers 
    XMLSerializer = serializers.get_serializer("json") 
    xml_serializer = XMLSerializer() 
    out = open(filename,"a") 
    from django.contrib.auth.models import User 
    from myapp.models import MyFirstModel 
    from myapp.models import MyNextModel 
    xml_serializer.serialize(User.objects.all(), stream=out) 
    xml_serializer.serialize(MyFirstModel.objects.all(), stream=out) 
    xml_serializer.serialize(MyNextModel.objects.all(), stream=out) 

if __name__ == '__main__': 
    write_data_to_file() 

bash 셸에서

>>python datacopy.py 
을 시도했습니다.

그러나 이것은 사용자 모델의 데이터 만 기록하고 앱에서 만든 모델을 복사하지 못합니다.

오류 메시지

Traceback (most recent call last): 
    File "datacopy.py", line 29, in <module> 
    write_data_to_file() 
    File "datacopy.py", line 23, in write_data_to_file 
    xml_serializer.serialize(MyFirstModel.objects.all(), stream=out) 
    File "/home/me/Django-1.1.1/django/core/serializers/base.py", line 38, in serialize 
    for obj in queryset: 
    File "/home/me/Django-1.1.1/django/db/models/query.py", line 106, in _result_iter 
    self._fill_cache() 
    File "/home/me/Django-1.1.1/django/db/models/query.py", line 692, in _fill_cache 
    self._result_cache.append(self._iter.next()) 
    File "/home/me/Django-1.1.1/django/db/models/query.py", line 238, in iterator 
    for row in self.query.results_iter(): 
    File "/home/me/Django-1.1.1/django/db/models/sql/query.py", line 287, in results_iter 
    for rows in self.execute_sql(MULTI): 
    File "/home/me/Django-1.1.1/django/db/models/sql/query.py", line 2369, in execute_sql 
    cursor.execute(sql, params) 
    File "/home/me/Django-1.1.1/django/db/backends/util.py", line 19, in execute 
    return self.cursor.execute(sql, params) 
psycopg2.ProgrammingError: relation "myapp_myfirstmodel" does not exist 

python manage.py shell을 사용할 때 세 가지 모델의 데이터를 복사 할 수 있습니다. 왜이 오류는 bash에서 스크립트를 실행할 때 발생합니까? myapp in PYTHONPATH

답변

1

./manage.py dumpdata를 사용 했습니까? 직렬화 형식을 지정할 수 있습니다.

스크립트가 작동하려면 DJANGO_SETTINGS을 (를) 올바른 settings.py로 설정 했습니까?

from django.core import serializers 
from django.contrib.auth.models import User 
from myapp.models import MyFirstModel 
from myapp.models import MyNextModel 

def write_data_to_file(): 
    XMLSerializer = serializers.get_serializer("json") 
    xml_serializer = XMLSerializer() 
    out = open(filename,"a") 
+0

내가 그것을 생각하기 때문에 생각 나게에 대한 DJANGO_SETTINGS의 ..thanks입니다 :

둘째 아마 더 나은 파일의 헤드로 이동하는 함수 내부에 수입을하고있는 이유는,이 –