Flask-SQLAlchemy: impossible de se reconnecter jusqu'à ce que la transaction non valide soit annulée

Je suis donc en utilisant des Services Web Amazon RDS pour exécuter un serveur MySQL et l'utilisation de Python Flacon cadre de l'exécution de l'application serveur et en Flacon de SQLAlchemy à l'interface avec le RDS.

Mon application config.py

SQLALCHEMY_DATABASE_URI = '<RDS Host>'
SQLALCHEMY_POOL_RECYCLE = 60

Mon __ init __.py

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

application = Flask(__name__)
application.config.from_object('config')
db = SQLAlchemy(application)

J'ai mon principal application.py

from flask import Flask
from application import db
import flask.ext.restless
from application.models import Person

application = Flask(__name__)
application.debug=True
db.init_app(application)

@application.route('/')
def index():
    return "Hello, World!"

manager = flask.ext.restless.APIManager(application, flask_sqlalchemy_db=db)
manager.create_api(Person, methods=['GET','POST', 'DELETE'])

if __name__ == '__main__':
    application.run(host='0.0.0.0')

L'models.py

class Person(db.Model):
    __bind_key__= 'people'
    id = db.Column(db.Integer, primary_key=True)
    firstName = db.Column(db.String(80))
    lastName = db.Column(db.String(80))
    email = db.Column(db.String(80))

    def __init__(self, firstName=None, lastName=None, email=None):
        self.firstName = firstName
        self.lastName = lastName
        self.email = email

Je puis avoir un script pour remplir la base de données à des fins de test après la db de la création et de l'application de début:

from application import db
from application.models import Person

person = Person('Bob', 'Jones', '[email protected]')
db.session.add(person)
db.session.commit()

Une fois que j'ai réinitialiser la base de données db.drop_all() et db.create_all() je commence le application.py et puis le script pour remplir la base de données.

Que le serveur répond avec un bon JSON, mais si je reviens en arrière et vérifier heures plus tard, je reçois le message d'erreur que j'ai besoin de restauration ou parfois l'2006 erreur MySQL server has gone away.

On m'a suggéré de changer les paramètres de délai d'attente sur le serveur MySQL, mais qui n'a pas fixé de rien. Voici mes paramètres:

innodb_lock_wait_timeout = 3000
max_allowed_packet       = 65536
net_write_timeout        = 300
wait_timeout             = 300

Puis, quand je regarde le RDS moniteur, il montre le serveur MySQL gardé la connexion ouverte pendant un certain temps jusqu'à ce que le délai d'attente. Maintenant, corrigez-moi si je me trompe, mais n'est-ce pas la connexion censé être fermé après c'est fini? Il semble que le serveur de l'application continue à faire assurez-vous que la connexion de base de données existe et puis, quand le serveur MySQL, Flacon/en Flacon de SQLAlchemy renvoie une erreur et arrête le serveur d'application.

Toutes les suggestions sont appréciés, merci!

source d'informationauteur internetwhy