Wann sollte ich mit SQLAlchemy eine For-Schleife anwenden?

8

Was ist richtig? Ich weiß, der erste wird funktionieren, aber ich vermute, es ist mehr Arbeit für die DB als nötig. Wird der zweite genauso gut funktionieren, aber mit weniger Arbeit für die DB? Ich benutze MySQL FWIW.

%Vor%

oder

%Vor%     
Mark 02.02.2013, 19:53
quelle

1 Antwort

4

Ich denke, Ihre zweite Lösung ist besser, aber es hängt davon ab, wie Sie Ihre Sitzung konfiguriert haben. Insbesondere die Autoflush- und Autocommit-Einstellungen. Außerdem sollten Sie eine Engine verwenden, die Transaktionen wie innodb unterstützt.

Angenommen, Sie haben Autocommit und Autoflush beide deaktiviert, dann würden Sie Ihre Einfügung auf den Server übertragen, die vorherige Transaktion übernehmen und dann bei jeder Iteration eine weitere Transaktion erstellen, die sowohl in SQLAlchemy als auch in MySQL viel unnötige Arbeit erzeugt. p>

Ich würde empfehlen, add_all zu verwenden, wenn Sie eine einfache Liste von Elementen haben, die Sie hinzufügen möchten, wie in Ihrem Beispiel, andernfalls müssen Sie das Commit auf jeden Fall außerhalb der Schleife anwenden.

Ссылка

%Vor%

Ein zusätzlicher Hinweis, wenn etwas während der Schleife schief gehen sollte, schreibt Ihre Transaktion Rollback nur zu Ihrem vorherigen Commit in der Schleife, was wahrscheinlich nicht das ist, was Sie wollen, wenn Sie Transaktionen verwenden. Zum Beispiel könnte nur die Hälfte Ihrer Elemente in der Liste in die Datenbank geschrieben werden, wenn ein Fehler in der Mitte der Schleife auftritt. Während das Festschreiben außerhalb der Schleife garantiert, dass Ihre Schleife beendet ist und ALLE COMMITES oder ALLE zurückgesetzt wird.

    
Ian Wilson 02.02.2013, 23:08
quelle

Tags und Links