У меня есть djano web app
, в котором данные о некоторых записях хранятся в postgres db
. Чтобы скопировать данные в дБ в json file
с, я обычно использую python manage.py shell
и использую API сериализации, как упомянуто в руководстве django. .
>>>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 в PYTHONPATH