简体   繁体   English

sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query')

[英]sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query')

I'm working with Python, Flask, and SQLAlchemy.我正在使用 Python、Flask 和 SQLAlchemy。 I've been using a local database while building my application, and it has been working fine with the following code:在构建我的应用程序时,我一直在使用本地数据库,并且使用以下代码运行良好:

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)

Now, I'm trying to get this code to connect to a remote database using the Python package sshtunnel.现在,我试图让这段代码使用 Python 包 sshtunnel 连接到远程数据库。 Here is what this code looks like:下面是这段代码的样子:

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)

It SEEMS like this is connecting, but immediately after launching my flask application, I'm receiving the following error:看起来像这样正在连接,但在启动我的烧瓶应用程序后,我立即收到以下错误:

sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query')

Any insight into this issue would be helpful.对此问题的任何见解都会有所帮助。 Thanks in advance!提前致谢!

You can set SQLALCHEMY_POOL_RECYCLE to a value less than SQLALCHEMY_POOL_TIMEOUT in configuration of Flask-SQLAlchemy .您可以在Flask-SQLAlchemy配置SQLALCHEMY_POOL_TIMEOUT设置为小于SQLALCHEMY_POOL_RECYCLE的值。 Check the timeouts part of the documentation.检查文档的超时部分。

I tried pool_recycle value less than wait_timeout (used 50 for mariadb database), but I do not know why it didn't work for me!我试过 pool_recycle 值小于 wait_timeout(mariadb 数据库使用 50),但我不知道为什么它对我不起作用! Using an explicit pre_ping and session rollback / close within a try / except block work for me.在 try / except 块中使用显式 pre_ping 和会话回滚/关闭对我有用。 I used this decorator below to wrap all my functions and that solved my problem:我使用下面的这个装饰器来包装我的所有功能并解决了我的问题:

def manage_session(f):
    def inner(*args, **kwargs):

        # MANUAL PRE PING
        try:
            db.session.execute("SELECT 1;")
            db.session.commit()
        except:
            db.session.rollback()
        finally:
            db.session.close()

        # SESSION COMMIT, ROLLBACK, CLOSE
        try:
            res = f(*args, **kwargs)
            db.session.commit()
            return res
        except Exception as e:
            db.session.rollback()
            raise e
            # OR return traceback.format_exc()
        finally:
            db.session.close()
    return inner

and then decorated my functions like below:然后装饰我的功能,如下所示:

@manage_session
def my_function(*args, **kwargs):
    return "result"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 pymysql.err.OperationalError - 查询期间丢失与 MySQL 服务器的连接 - pymysql.err.OperationalError - Lost connection to MySQL server during query python pymysql.err.OperationalError:(2013年,“查询期间与MySQL服务器的连接丢失”) - python pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query') pymysql.err.OperationalError: (2013, '在查询期间丢失与 MySQL 服务器的连接') - pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query') SQLAlchemy 和 Kubernetes - OperationalError 2013 - “在查询过程中失去与 MYSQL 服务器的连接” - SQLAlchemy and Kubernetes - OperationalError 2013 - "Lost Connection to MYSQL server during query" GAE Python - OperationalError:(2013年,“在查询期间丢失了与MySQL服务器的连接”) - GAE Python - OperationalError: (2013, 'Lost connection to MySQL server during query') sqlalchemy.exc.OperationalError - sqlalchemy.exc.OperationalError Sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) - Sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) Flask: sqlalchemy.exc.OperationalError - Flask: sqlalchemy.exc.OperationalError 金字塔:sqlalchemy.exc.OperationalError - Pyramid: sqlalchemy.exc.OperationalError 识别 sqlalchemy.exc.OperationalError - Identifying sqlalchemy.exc.OperationalError
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM