繁体   English   中英

SqlAlchemy中的陌生错误。 虫子?

[英]Stranger error in SqlAlchemy. Bug?

我尝试使用Flask-Restful + SqlAlchemy(带有Automap)+ MySql SGDB,但我不明白为什么在我的代码中发生此错误:

我在控制器中发送了请求,该请求正常运行,但是10秒钟后,生成了与SGDB失去连接的错误。

itens = session.query(estados).filter(estados.ativo == True)

但奇怪的是,如果我使用SQL字符串语法,则不会发生此问题。

itens = engine.execute("SELECT `TBEstados`.`id`, `TBEstados`.`nome`, `TBEstados`.`ativo` FROM `intbr_webapp`.`TBEstados`;")

我正在使用SqlAlchemy 1.2,但我也尝试了1.1版本。 我确实尝试过也使用pre-ping=true ,但未获得成功。

有人对此有任何了解吗? 我不明白为什么使用ORM结构不起作用,但是使用SQL语法确实起作用。 连接相同,但结果不同。

我的代码如下:

estado.py

from flask import jsonify
from flask_restful import Resource
from json import dumps
from resources.database import Base, session, engine
#from resources.dataEncoder import JsonModel
from models.TBEstados import TBEstadosSchema

class Estados(Resource):
    def get(self):            
        estados = Base.classes.TBEstados
        itens = session.query(estados).filter(estados.ativo == True)
        result = TBEstadosSchema(many=True).dump(itens)
        return jsonify(result.data)

database.py(在EstadoModel中导入)

from flask import Flask, g
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import sessionmaker
from flask_marshmallow import Marshmallow

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = my conn string

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_POOL_RECYCLE'] = 3600
app.config['SQLALCHEMY_POOL_TIMEOUT'] = 30

Base = automap_base()
engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'], pool_pre_ping=True)
# reflect the tables
Base.prepare(engine, reflect=True)
Session = sessionmaker(bind=engine)
session = Session()

ma = Marshmallow()

运行

from flask import Flask, g
from flask_restful import Resource, Api
import resources.database
from controllers.Estados import Estados

app = Flask(__name__)

api = Api(app)
api.add_resource(Estados, '/estados')

if __name__ == '__main__':
    app.run(debug=True, port=9002)

确切的错误:

sqlalchemy.exc.OperationalError sqlalchemy.exc.OperationalError:(pymysql.err.OperationalError)(2013,'在查询过程中丢失了与MySQL服务器的连接')[SQL:'SELECT TBEstados .id AS TBEstados_idTBEstados .nome AS TBEstados_nomeTBEstados ativo AS TBEstados_ativo \\ n从TBEstados \\ nWHERE TBEstados .ativo = true']

我解决了我的问题!

我将“ 10s”的MySql变量wait_timeout的值更改为100s(以进行测试),使用PyMySql提供程序的SqlAlchemy中的错误不再发生。

https://dev.mysql.com/doc/refman/5.7/zh-CN/server-system-variables.html#sysvar_wait_timeout

感谢帮助!

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM