So erhalten Sie Primärschlüssel von Objekten, die mit django bulk_create erstellt wurden
Ist es ein Weg, um die Primärschlüssel der Objekte, die Sie erstellt haben, mithilfe der bulk_create Funktion in django 1.4+?
InformationsquelleAutor der Frage mikec | 2013-04-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
2016
Django 1.10 - es ist nun unterstützt (auf Postgres nur!) hier ist ein link zu doc.
Aus dem change log:
InformationsquelleAutor der Antwort Or Duan
Anhand der Dokumentation können Sie es nicht: https://docs.djangoproject.com/en/dev/ref/models/querysets/#bulk-create
bulk-erstellen ist einfach: erstellen Sie eine Menge von Objekten in einer effizienten Art und Weise spart eine Menge Abfragen. Aber das bedeutet, dass die Antwort, die Sie erhalten, ist irgendwie unvollständig. Wenn Sie das tun:
Das bedeutet nicht, dass Ihre Kategorien nicht pk, sondern nur, dass die Abfrage nicht abgerufen werden (wenn der Schlüssel ein
AutoField
). Wenn Sie möchten, dass die pks für einige Grund benötigen Sie zum speichern der Objekte in eine klassische Art und Weise.InformationsquelleAutor der Antwort pyriku
Zwei Ansätze, die ich mir denken kann:
a) Sie tun konnte,
Könnte dies ein wenig teuer, wenn das queryset ist enorm.
b) Wenn das Modell hat eine
created_at
Feld,Dieser hat die Beschränkung, dass ein Feld, das speichert, wenn das Objekt erstellt wurde.
InformationsquelleAutor der Antwort karthikr
Eigentlich mein Kollege hat vorgeschlagen, die folgende Lösung scheint alles so offensichtlich jetzt. Fügen Sie eine neue Spalte namens
bulk_ref
die Sie füllen mit einem eindeutigen Wert und legen Sie für jede Zeile an. Danach einfach die Abfrage die Tabelle mit denbulk_ref
vorher festgelegt und voila, Ihre eingefügten Datensätze abgerufen werden. z.B.:InformationsquelleAutor der Antwort DanH
Wahrscheinlich die einfachste Lösung ist die manuelle zuweisen von Primärschlüsseln. Es hängt ab vom konkreten Fall, aber manchmal ist es genug, um zu starten mit max(id)+1 from Tabelle und ordnen Sie die Nummern Inkrementieren auf jedes Objekt. Jedoch, wenn mehrere clients können Datensätze einfügen gleichzeitig einige sperren, können erforderlich sein.
InformationsquelleAutor der Antwort peper0
Den django-Dokumentation Staaten derzeit unter den Einschränkungen:
Aber es gibt auch gute Nachrichten. Es hat schon ein paar tickets reden
bulk_create
aus dem Speicher. Die ticket oben aufgeführten ist am ehesten eine Lösung, die bald umgesetzt werden, aber es gibt keine Garantie auf Zeit oder, wenn Sie es je schaffen werde.So gibt es zwei mögliche Lösungen,
Warten und sehen, ob dieser patch macht es für die Produktion. Sie können helfen, mit diesem durch das testen aus der genannten Lösung, und lassen Sie die django-community wissen, Ihre Gedanken /Fragen. https://code.djangoproject.com/attachment/ticket/19527/bulk_create_and_create_schema_django_v1.5.1.patch
Überschreiben /schreiben Sie Ihre eigenen bulk insert-Lösung.
InformationsquelleAutor der Antwort Matt Seymour
Dieser funktioniert nicht auf Lager Django, aber es ist ein patch in die Django-bug tracker das macht bulk_create legen Sie den Primärschlüssel für die erstellten Objekte.
InformationsquelleAutor der Antwort user3175220
Sollte diese Arbeit.
InformationsquelleAutor der Antwort YYYY-MM-DD