Ich arbeite mit Python, Flask und SQLAlchemy. Ich habe beim Erstellen meiner Anwendung eine lokale Datenbank verwendet, und der folgende Code funktioniert einwandfrei:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config[
"SQLALCHEMY_DATABASE_URI"] =
"mysql+pymysql://<username>:<password>@localhost/<DBName>"
db = SQLAlchemy(app)
Jetzt versuche ich, diesen Code zu erhalten, um eine Verbindung zu einer entfernten Datenbank mithilfe des Python-Pakets sshtunnel herzustellen. Dieser Code sieht folgendermaßen aus:
from flask import Flask
from sshtunnel import SSHTunnelForwarder
from flask_sqlalchemy import SQLAlchemy
forwarding_server = SSHTunnelForwarder(
"1.2.3.4", #my host IP address
ssh_username="user",
ssh_password="password",
remote_bind_address=("127.0.0.1", 8080)
)
forwarding_server.start()
local_port = str(forwarding_server.local_bind_port)
app = Flask(__name__)
app.config[
"SQLALCHEMY_DATABASE_URI"] =
"mysql+pymysql://<username>:<password>@127.0.0.1:" + local_port + "/<DBName>"
db = SQLAlchemy(app)
Es sieht so aus, als würde es eine Verbindung herstellen, aber unmittelbar nach dem Start meiner Flaschenanwendung erhalte ich folgende Fehlermeldung:
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2013, "Lost connection to MySQL server during query")
Jede Einsicht in dieses Problem wäre hilfreich. Danke im Voraus!
Antworten:
3 für die Antwort № 1Sie können einstellen SQLALCHEMY_POOL_RECYCLE
auf einen Wert kleiner als SQLALCHEMY_POOL_TIMEOUT
in der Konfiguration von Flask-SQLAlchemy
. Überprüf den Zeitüberschreitungen Teil der Dokumentation.