Чужая ошибка в SqlAlchemy. Ошибка?

Я пытался использовать 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()

run.py

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_id , TBEstados .nome AS TBEstados_nome , TBEstados .ativo AS TBEstados_ativo \ Nfrom TBEstados \ Nwhere TBEstados .ativo = true']

1 ответ

Я решил свою проблему!

Я изменил значение переменной MySql wait_timeout "10 с" на 100 с (для проверки), и ошибка в SqlAlchemy с использованием поставщика PyMySql больше не возникала.

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html

Спасибо за помощь!

Другие вопросы по тегам