Warum db.Sitzung.remove() aufgerufen werden muss?

Bin ich nach einem tutorial, um zu erfahren Kolben web-Entwicklung, und hier ist der unit-Test-Datei:

import unittest
from flask import current_app
from app import create_app, db

class BasicsTestCase(unittest.TestCase):
    def setUp(self):
        self.app = create_app('testing')
        self.app_context = self.app.app_context()
        self.app_context.push()
        db.create_all()

    def tearDown(self):
        db.session.remove()
        db.drop_all()
        self.app_context.pop()

    def test_foo(self):
        pass

Habe ich dann auch gefunden, diese Sätze in SQLAlchemy-Dokument:

Mithilfe der oben genannten Fluss, der Prozess der Integration der Session mit
die web-Anwendung hat genau zwei Anforderungen:

  • ......

  • Sicherzustellen, dass scoped_session.remove() wird aufgerufen, wenn der web-Anfrage endet, in der Regel durch die Integration mit dem web-framework das event-system
    Schaffung einer "auf Anfrage Ende" - Ereignis.

Meine Frage ist: Warum muss ich anrufen db.session.remove()?

Ich denke, so lange db.session.commit() wird nicht aufgerufen, wird die Datenbank nicht geändert werden. Auch, wenn ich diese Zeile auskommentieren, wird die Anwendung noch in der Lage sein, um übergeben Sie die unit-test.

Habe ich konsultiert, die Dokumente sowohl von Flask-SQLAlchemy und SQLAlchemy, aber die erstere nicht einmal erwähnt db.session.remove(), während die letzteren ist zu Abstrakt für mich zu verstehen.

  • Ja, aber ich denke, dass eine Sitzung automatisch entfernt, wenn eine Anfrage kommt zu einem Ende.
  • das war im Grunde war ich versucht zu sagen, ist es der Kontext, der code in deiner Frage sehe ich keine Verwendung für Sie.
  • Ich habe aktualisiert die Frage: Es ist nicht nur code, sondern auch das Dokument, das verwirrt mich.
  • Ich vorstellen, die Freigabe der db-Verbindung wieder in den pool ist ganz wichtig und das ist es, was die docs sagen.
InformationsquelleAutor nalzok | 2016-09-14
Schreibe einen Kommentar