Question sur le lot d'enregistrer des objets dans Django
Je n'ai pas vu quelque chose à ce sujet dans Django en ligne de documents.
Je suis en train d'enregistrer une liste d'objets de base de données, mais ce que je peux faire une boucle sur la liste et appeler la méthode save() sur chaque objet.
Ne sorte de Django hit de base de données à plusieurs reprises? Ou Django va faire un lot économiser de la place?
- Peut-être la peine de changer la accepté de répondre maintenant que bulk_create() est disponible dans django 1.4 et jusqu'
Vous devez vous connecter pour publier un commentaire.
Malheureusement, lot inserts sont quelque chose que Django 1.3 et avant ne sont pas directement en charge. Si vous souhaitez utiliser l'ORM, alors vous n'avez qu'à appeler la méthode save() de chaque objet. Si c'est une grande liste et de la performance est un problème, vous pouvez utiliser django.db.curseur pour INSÉRER les éléments manuellement à l'intérieur d'une transaction considérablement accélérer le processus. Si vous avez un énorme jeu de données, vous avez besoin pour commencer à chercher au moteur de Base de données de méthodes spécifiques, comme la COPIE DE dans Postgres.
bulk_create()
traitera efficace des données en vrac inserts. (docs.djangoproject.com/en/1.5/ref/models/querysets/#bulk-create)De Django 1.4, il existe un
bulk_create()
méthode sur l'objet QuerySet, qui permet l'insertion d'une liste d'objets dans une seule requête. Pour plus d'info, voir:bulk_create
De Django 1.4 existe
bulk_create()
, mais, toujours, mais.Vous devez être prudent, en utilisant
bulk_create()
il l'habitude de l'appeler instancesave()
méthode en interne.Que django docs dit
Donc, si vous écrasez méthode save (comme mon cas a) vous ne pouvez pas utiliser bulk_create.
Cette question est également abordée dans Comment puis-je procéder à une insertion dans Django?, qui fournit quelques façons de faire de Django faire.
Cette pourrait être un bon point de départ, mais comme l'auteur de l'extrait de code dit, il pourrait ne pas être prêt pour la production.