Vidage des données Django pour un seul modèle?
-
12-09-2019 - |
Question
Puis-je effectuer une dumpdata
sur un seul modèle Django , plutôt que l'application entière, et si oui, comment?
Pour une application, il serait:
python manage.py dumpdata myapp
Cependant, je veux certains modèles spécifiques, tels que « myapp.mymodel » sous-évalués. La raison, j'ai quelques énormes, 3 millions de disques, ainsi que des jeux de données dans la même application que je ne voudrais pas l'objet de dumping.
La solution
de la version 1.1 et plus, Django dumpdata
commande de gestion permet de vider les données des tables individuelles:
./manage.py dumpdata myapp1 myapp2.my_model
Vous pouvez également séparer plusieurs applications et modèles sur la ligne de commande. Voici la définition canonique:
django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]]
Autres conseils
Comme il est indiqué, vous ne pouvez pas le faire à travers une commande manage.py dans Django 1.0. Cependant, vous pouvez utiliser un script pour exporter le fichier JSON, et le charger en utilisant loaddata
:
from django.core import serializers
from myproject.myapp import models
data = serializers.serialize("json", models.MyModel.objects.all())
out = open("mymodel.json", "w")
out.write(data)
out.close()
Je pense que vous avez la solution dans votre question. Vous pouvez jeter un modèle individuel comme celui-ci:
./manage.py dumpdata myapp.my_model
Prendre toutes les données en format JSON du modèle django.
Syntaxe:
python manage.py dumpdata app_name.model_name
exemple données relatives au dumping de modèle group_permission qui résident dans l'application par défaut auth dans django.
python manage.py dumpdata auth.group_permission
Pour la sortie un coup d'oeil sur la console .
Pour le succès que je devais le dire deux fois, et préciser deux fois le modèle, comme:
./manage.py dumpdata myapp2.my_model myapp2.my_model
Si je ne dis
./manage.py dumpdata myapp2 myapp2.my_model
Je suis inondé de tous les modèles myapp2, malgré le fait que je spécifié my_model.
Pour contourner ce problème, vous pouvez faire une autre application et copier le modèle, mais pointer à la table existante avec l'option db_table méta. Ensuite, vous pouvez simplement vider les modèles copiés dans la nouvelle application. Vous l'application existante ne serait pas affecté.
J'ai créé commande la gestion générer un un appareil sur une base par modèle. Les luminaires à tubes peuvent être générés en exécutant:
./manage generate_fixtures app.model.MyModel --file=dump/MyModel.json
Code à: https://gist.github.com/2394883