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.
Und wenn die App abgebaut wird, wird session
geschlossen und engine
wird gelöscht
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?
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.
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%Tags und Links python mysql sqlalchemy flask