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
Vous devez vous connecter pour publier un commentaire.
Je pense que ce qui fait qu'il a été l'ajout d'
dans application.py n'ont pas eu l'erreur depuis.
Chaque fois que la vérification de la restauration ou pas, c'est gênant..
J'ai fait insérer, mettre à jour les fonctions qui ont besoin de s'engager.
Vous pouvez également utiliser cette à la fin du script qui remplit votre base de données:
Qui devrait éviter que ces ennuyeux "MySQL server has gone away" des erreurs.