Besteht diese Behauptung immer oder nicht? Mit anderen Worten, speichert SQLAlchemy die Reihenfolge (beim Generieren von INSERT-Abfragen) beim Hinzufügen neuer Objekte zur Sitzung?
%Vor%Keine, in der Produktion verwende ich postgresql, sqlite ist zum Testen.
Nachdem wir uns ein wenig die SQLAlchemy-Quelle angesehen haben, sieht es wie add()
Datensätze aus, als es eingefügt wurde: Ссылка
Das relevante Snippet:
%Vor% Und das heißt von Session.add
= & gt; self._save_or_update_state
= & gt; self._save_or_update_impl
= & gt; self._save_impl
.
Es wird dann beim Speichern in _sort_states
verwendet: Ссылка
Dies ist leider nur der Nachweis auf der Implementierungsebene. Ich konnte nichts in der Dokumentation finden, die es garantiert ...
Aktualisieren : Ich habe seither ein bisschen mehr in diese Sache hineingeschaut, es stellt sich heraus, dass es in SQLAlchemy ein Konzept namens Unit of Work gibt, das die Reihenfolge während eines Flushes etwas definiert: Ссылка (Suche nach Unit of Work).
Innerhalb derselben Klasse wird die Reihenfolge in der Tat durch die Reihenfolge bestimmt, in der add
aufgerufen wurde. Möglicherweise sehen Sie jedoch unterschiedliche Sortierungen in den INSERTs zwischen verschiedenen Klassen. Wenn Sie das Objekt a
vom Typ A
hinzufügen und später das Objekt b
vom Typ B
hinzufügen, aber a
einen Fremdschlüssel für b
aufweist, wird ein INSERT für% co_de angezeigt % vor dem INSERT für b
.
Tags und Links python database sqlalchemy orm