Wie schließe ich mysql-Verbindungen in sqlalchemy richtig?

8

Ich würde gerne wissen, was richtig ist, um alle mysql-Verbindungen in sqlalchemy zu schließen. Für den Kontext ist es eine Flask-Anwendung und alle Ansichten teilen sich das gleiche session -Objekt.

%Vor%

Und wenn die App abgebaut wird, wird session geschlossen und engine wird gelöscht

%Vor%

Aber nach Datenbankprotokoll habe ich immer noch eine Menge Fehler wie [Warning] Aborted connection 940 to db: 'master' user: 'root' host: '172.19.0.7' (Got an error reading communication packets) .

Ich habe einige Lösungen versucht, einschließlich gc.collect() und engine.pool.dispose() , aber ohne Erfolg ...

Ich vermute, dass hinter der Szene noch einige Verbindungen durch den Motor geöffnet sind und sie geschlossen werden müssen. Gibt es überhaupt eine Liste aller Sitzungen / Verbindungen, die von der Suchmaschine geöffnet wurden?

Nachdem Sie viel Zeit darauf verwendet haben, wird jeder Hinweis / Hilfe / Zeiger sehr geschätzt! Danke.

PS: Die Aufrufe dispose und close sind inspiriert von How Schließen Sie die SQL-Verbindung in MySQL . Übrigens, was ist eine ausgecheckte Verbindung?

    
Son 11.01.2018, 17:44
quelle

2 Antworten

0

Endlich habe ich den Schuldigen gefunden: Der Apscheduler , der in einem Hintergrundprozess gestartet wird, verwendet ein session verbunden mit die Datenbank und scheint es nicht richtig zu veröffentlichen.

Die beste Vorgehensweise, die wir beim Umgang mit sqlalchemy-Sitzungen in einer Flask-App gefunden haben, besteht darin, scoped_session zu verwenden und sicherzustellen, dass remove() am Ende der Anfrage aufgerufen wird (d. h. appcontext_teardown ). Dies wird auch in flask-sqlalchemy-Erweiterung verwendet.

    
Son 29.01.2018, 16:42
quelle
4

Dies beantwortet Ihre Frage möglicherweise nicht vollständig, aber ich habe diese Methode verwendet, um sicherzustellen, dass alle meine Sitzungen geschlossen sind. Jede Funktion, die eine Sitzung verwendet, ruft den Dekorierer provide_session ab. Beachten Sie, dass das Argument session=None vorhanden sein muss.

z. B.

%Vor%

Ich habe gesehen, dass es im Incubator-Airflow-Projekt verwendet wurde und es wirklich gut fand.

%Vor%     
Sebastian 11.01.2018 18:11
quelle

Tags und Links