Ich habe Code für eine App geerbt, die für Django 1.4 geschrieben wurde. Wir müssen die Codebasis aktualisieren, um mit Django 1.7 und schließlich 1.8 als nächste Long Term Support-Version zu arbeiten.
An einigen Stellen verwendet es den alten Stil @transaction.commit_manually
und with transaction.commit_manually:
Ich weiß nicht genug über Transaktionen im Allgemeinen, aber ich versuche zu verstehen, wofür sie verwendet werden, also kann ich sie entweder entfernen (wenn nicht unnötig) oder sie auf die neuere set_autocommit(False)
oder gleichwertig aktualisieren.
Ich habe verstanden, dass das Transaktionsmanagement in Django & lt; 1.5 war nicht ideal und für die meisten Anwendungsfälle zu kompliziert.
Die Datenbankverbindung sieht so aus, ohne spezielle Transaktionsverwaltung. (Mit Postgres 9.3)
%Vor%Es gibt keine spezielle Transaktions-Middleware.
Ich finde die folgende Ansicht besonders rätselhaft. (Bearbeitet)
%Vor% Dabei ist initialize_xml_model
eine Funktion, die eine flache XML-Datei (XML-Modellvorlage) verwendet und ein neues XMLModel-Objekt erstellt. Und insert_user_info
fügt Informationen, die im Benutzerobjekt gespeichert sind, in das XML-Modell ein.
Die Art, wie ich diesen Code lese, ist
autocommit
mit commit_manually
transaction.commit()
speichert dies in der Datenbank, wenn keine Fehler vorliegen. model
eine Unicode-Instanz ist und kodiere sie dann (ich bin mir nicht sicher, was genau das tut) model
model
zu ( tostring
ist eine XMLManipulator-Methode, die Stylesheet-Deklarationen beibehält.) xml
-Objekt Nach 5. ist die einzige Sache, die sich mit der db (in einem Lesevorgang) beschäftigt, die Methode insert_user_info.
Ich verstehe nicht wirklich, warum das in einer speziellen Transaktion passiert. Es gibt kein Schreiben an die db?
Es gibt keine anderen Methoden in dieser Ansicht, nur get.
Ich habe hier etwas Wichtiges verpasst, zögern Sie nicht, Fragen zu stellen oder weitere Informationen zu erhalten.
Ist die Transaktion hier wirklich notwendig, und wenn ja, wie könnte dies für das neue transaction.set_autocommit
neu geschrieben werden?
Jede Hilfe oder Hinweise würden sehr geschätzt werden.
Ein guter Weg, dies jetzt zu tun, ist transaction.atomic. In Ihrem Beispiel würde ich tun:
%Vor%Tags und Links python django xml transactions django-1.7