Massen erstellen Modellobjekte in Django
Ich habe eine Menge von Objekten, die zum speichern in der Datenbank, und so möchte ich die Erstellung von Modell-Instanzen.
Mit django, ich kann Sie alle die Modelle, die Instanzen, mit MyModel(data)
, und dann will ich Sie alle zu retten.
Derzeit, ich habe so etwas wie, dass:
for item in items:
object = MyModel(name=item.name)
object.save()
Frage ich mich, ob ich speichern kann eine Liste von Objekten direkt, zB:
objects = []
for item in items:
objects.append(MyModel(name=item.name))
objects.save_all()
Wie Speichere alle Objekte in einer Transaktion?
Kommentar zu dem Problem
Es scheint, der ball rollt auf der Umsetzung einer Lösung für dieses Problem code.djangoproject.com/ticket/19527
Fragen, für die Liste.save_all ? Fast könnte man sich selbst beantworten, nur paraphrasieren, Fragen, und verwenden Sie die 2 ersten Worte, die aus Ihrem-topic-Frage.
InformationsquelleAutor der Frage Alexis Métaireau | 2010-08-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
als der django-Entwicklung der version 1.4 gibt es
bulk_create
als ein-Objekt-manager-Methode, die als Eingabe ein array von Objekten mit dem Konstruktor der Klasse. check-out django-docsInformationsquelleAutor der Antwort ecbtln
Verwenden bulk_create () - Methode. Es ist standard in Django jetzt: Offiziellen Django-Dokumentation bulk_create()
Beispiel:
InformationsquelleAutor der Antwort Danil
arbeitete für mich, verwenden Sie die manuelle transaktionsbearbeitung für die Schleife(postgres 9.1):
in der Tat ist es nicht das gleiche, als 'native' - Datenbank bulk insert -, aber es erlaubt Ihnen zu vermeiden/Kopiergeschwindigkeit transport/orms Operationen/sql-Abfrage analysieren Kosten
InformationsquelleAutor der Antwort eviltnan
Verwendung erstellen, die bewirkt, dass eine Abfrage pro neuen Artikel. Wenn Sie möchten, reduzieren Sie die Anzahl der Abfragen EINFÜGEN, müssen Sie etwas anderes verwenden.
Ich habe einige Erfolge mit der Bulk Insert-snippet, auch wenn das snippet ist schon ziemlich alt.
Vielleicht gibt es einige änderungen erforderlich, um es wieder zu arbeiten.
http://djangosnippets.org/snippets/446/
InformationsquelleAutor der Antwort OmerGertel
Schauen Sie sich dieses blog-post auf der bulkops Modul.
Auf mein django 1.3 app, die ich erlebt habe signifikanten Beschleunigung.
InformationsquelleAutor der Antwort MrJ
Hier ist, wie man bulk-Entitäten erstellen von Spalten-getrennt-Datei, abgesehen von alle unquoting und un-escaping-Routinen:
InformationsquelleAutor der Antwort Ivan Klass
für ein single-line-Implementierung Sie können einen lambda-Ausdruck in eine Karte
Hier, lambda entspricht jedes Element in der Liste Elemente zu x, und erstellen Sie einen Datenbank-Datensatz, wenn nötig.
Lambda-Dokumentation
InformationsquelleAutor der Antwort FallenAngel
Der einfachste Weg ist die Verwendung des
create
- Manager-Methode, die erstellt und speichert das Objekt in einem einzigen Schritt.InformationsquelleAutor der Antwort Daniel Roseman