Джанго Селективная Дампдата - PullRequest
33 голосов
/ 29 ноября 2011

Можно ли выборочно фильтровать, какие записи выходных данных команды управления Ddjango dumpdata? У меня есть несколько моделей, каждая из которых содержит миллионы строк, и я хочу, чтобы дампы только в одну модель соответствовали определенным критериям, а также все записи, связанные с внешним ключом, ссылающиеся на любую из этих записей.

Рассмотрим этот вариант использования. Скажем, у меня была производственная база данных, в которой моя модель User содержит миллионы записей. У меня есть несколько других моделей (журнал, транзакция, покупка, закладки и т. Д.), Все из которых ссылаются на модель пользователя. Я хочу заняться разработкой своего приложения Django, и я хочу протестировать, используя реалистичные данные. Тем не менее, моя производственная база данных настолько огромна, что я не могу реально сделать снимок всего этого и загрузить его локально. Поэтому в идеале я хотел бы использовать dumpdata для сброса 50 случайных записей пользователя и всех связанных записей в JSON и использовать их для заполнения базы данных разработки.

Есть ли простой способ сделать это?

Ответы [ 3 ]

17 голосов
/ 29 ноября 2011

Я думаю, django-fixture-magic может стоить взглянуть.

Дополнительную справочную информацию вы найдете в Очистка базы данных Django .

6 голосов
/ 29 ноября 2011

Этот фрагмент может быть полезен для вас (он отслеживает отношения и сериализует их):

http://djangosnippets.org/snippets/918/

Вы также можете использовать эту команду управления и переопределить менеджеры по умолчанию для любой модели, которую вы используете.хотел бы вернуть пользовательские наборы запросов.

3 голосов
/ 29 ноября 2011

Это не простой ответ на мой вопрос, но я нашел несколько интересных документов по встроенной в Django функции естественных ключей , которая позволяла бы представлять сериализованные записи без первичного ключа.К сожалению, не похоже, что это полностью интегрировано в dumpdata, и есть старый выдающийся билет , чтобы полностью полагаться на естественные ключи.

Также кажется, что функция serializers.serialize ()позволяет сериализовать произвольный список конкретных экземпляров модели.

Предположительно, если я реализовал метод natural_key () во всех моих моделях, а затем вызвал serializers.serialize ([Users.objects.filter (критерии)]), это должно быть близко к выполнению того, что я хочу.Возможно, мне придется написать функцию для сканирования всех ссылок FK и включить их в список объектов, переданных для serialize ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...