Записки разработчика

07.11.2017

Django Ошибка дампа данных Matching query does not exist

Поделюсь решением проблемы возникающей при попытке сделать дамп данных проекта:

Выполняя команду:

(env)➜  myproject git:(master) ✗ python project/manage.py dumpdata --natural-foreign --exclude auth.permission --exclude contenttypes --exclude admin.logentry --indent 4 > dump.json

Получил ответ:

CommandError: Unable to serialize database: MyModel matching query does not exist.

Где MyModel — имя модели, в моём случае это была AccountUser.

Ошибка сравнительно не информативная, гугление ничего особого не дало. Пришлось залезть в код фреймворка Django, в частности в ту часть где происходит дамп данных:

cd ../env/lib/python2.7/site-packages/django/core/management/commands
vi dumpdata.py

Видим что исключение выбрасывается на 208 строке:

raise CommandError("Unable to serialize database: %s" % e)

Пришлось закомментировать блок чтобы вываливало ошибку а не обрабатывало исключение. В итоге получаю по бэктрейсу (backtrace) ошибки вижу что проблема в django/db/models/query.py в исключении DoesNotExist с описанием : «matching query does not exist»

Вывожу разные переменные (print не работает), через это описание ошибки. Видно что всё по нулям. В итоге вывел self.query.

Он мне вывел запрос — который — я его выполнил в sql — выдал что да, этот запрос выдает результат нуль записей, из-за чего ошибка, собственно, и генерируется.

А дело всё в том, что у меня есть связанная таблица через ForeignKey (другая, скажем AccountCompany), и так получилось что там есть записи, которые ссылаются на AccountUser, но в AccountUser таких записей уже нет.

В общем, почистил вторую таблицу, «брошенных» записей нет, и вуаля! Дамп происходит как и должен. Не забудьте только убирать ваши изменения в библиотеках.

admin @ 02:50


17.10.2014

Как установить пакет dbfpy в виртуальное окружение virtualenv

Добрый день! Сегодня мы установим пакет Dbfpy в окружение virtualenv.

Думал я как-то импортировать в свое приложение базу КЛАДР. C DBF удобно работать через пакет dbfpy. Поставим:

(env)...$ pip install dbfpy

Этот пакет должен стать через PIP. Если же вы его не нашли, можно попробовать альтернативный способ — воспользоваться утилитой easy_install:

(env) $ easy_install http://sourceforge.net/projects/dbfpy/files/dbfpy/2.3.0/dbfpy-2.3.0.tar.gz/download

поменяйте версию, если актуальная сменилась.

* (env) — значит, что Вы нужно выполнить команду в виртуальном окружении. Чтобы установить виртуальное окружение:

установить:

$ sudo apt-get install python-virtualenv

создать:

$ virtualenv env

активировать:

source env/bin/activate

чтобы деактивировать, наберите:

deactivate
admin @ 01:35


05.09.2014

Устанавливаем mysql-python. Не найден mysql_config

Добрый день!
Сегодня мы пытаемся установить пакет mysql-python (он требуется для работы с базой данных Mysql из Python-а) и получаем ошибку — не найден mysql_config
Решается просто:

$ sudo apt-get install libmysqlclient-dev

Иногда может встретится проблема — если внимательно прочитать текст ошибки — Not found Python.h
Смотрим что у нас за версия python:

$ python

видим...

$ python
Python 2.7.3 (default, Mar 14 2014, 11:57:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.

Версия Python 2.7.3. Установим недостающий пакет:

$ sudo apt-get install python2.7-dev

Соответственно если у вас версия Python 2.6 — то пакет будет python2.6-dev

Так же при установке пакета Pillow можно получить ошибку:

File "/tmp/pip-build-Bratx1/Pillow/setup.py", line 516, in build_extensions
(f, f))
ValueError: jpeg is required unless explicitly disabled using --disable-jpeg, aborting

добавляем пакет:

sudo apt-get install libjpeg8-dev
admin @ 09:38


 

Powered by WordPress