sélectionner et mettre à jour la base de données avec un seul queryset
Comment puis-je exécuter une update
et select
déclarations sur le même queryset
plutôt que d'avoir à faire deux requêtes:
- pour sélectionner l'objet
- et une mise à jour de l'objet
L'équivalent de SQL serait quelque chose comme:
update my_table set field_1 = 'some value' where pk_field = some_value
Vous devez vous connecter pour publier un commentaire.
Utiliser le queryset l'objet
update
méthode:update
méthode comme ceci puis tous les signaux attaché à ce modèle ou un autre code de "trucs" ne fonctionne pas sur les objets. Juste un pointeur de quelqu'un qui a grillé 🙂update
méthode est idéal pour les mises à jour en masse, mais il devrait être un avertissement dans votre tête lorsque vous utilisez ce que vous avez besoin de revoir tous les signaux attaché à l'objet qui peut également être déclenché manuellementMyModel.objects.filter(pk=some_value).update(field1=self.data)
Django objets de base de données utilisez la même méthode save() pour créer et modifier les objets.
Réf.: https://docs.djangoproject.com/en/1.9/ref/models/instances/
Cette réponse compare les deux approches ci-dessus.
Si vous voulez mettre à jour de nombreux objets en une seule ligne, rendez-vous pour:
Sinon, vous n'avez à effectuer une itération sur la requête définir et mettre à jour des objets individuels:
Approche 1 est plus rapide car, il ne fait qu'une seule requête de base de données, par rapport à la méthode 2 qui fait de 'n+1' requêtes de base de données. (Pour n éléments dans la requête set)
Poing approche rend un db requête de mise à JOUR de ie, la deuxième on fait deux: SÉLECTIONNEZ mise à JOUR.
La différence est que, supposons que vous avez tous les déclencheurs, comme la mise à jour
updated_on
ou des domaines connexes, il ne sera pas déclenchée sur la mise à jour directe ie s'approche de 1.Approche 1 est utilisé sur un queryset, de sorte qu'il est possible de mettre à jour plusieurs objets à la fois, pas dans le cas de l'approche 2.
seulement dans un cas
serializer
choses, vous pouvez mettre à jour de manière très simple!seulement dans un cas
form
choses!