Flask-SQLAlchemy:在回滚无效事务之前无法重新连接

因此,我使用Amazon Web Services RDS运行MySQL服务器,并使用Python的Flask框架运行应用程序服务器,并使用Flask-SQLAlchemy与RDS进行接口。

我的应用程序config.py

SQLALCHEMY_DATABASE_URI = '<RDS Host>'

SQLALCHEMY_POOL_RECYCLE = 60

我的__初始化__.py

from flask import Flask

from flask.ext.sqlalchemy import SQLAlchemy

application = Flask(__name__)

application.config.from_object('config')

db = SQLAlchemy(application)

我有我的主要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')

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

然后,在创建数据库和启动应用后,我有了一个脚本来填充数据库以进行测试:

from application import db

from application.models import Person

person = Person('Bob', 'Jones', 'bob@website.net')

db.session.add(person)

db.session.commit()

使用db.drop_all()和db.create_all()重置数据库后,我将启动application.py,然后启动用于填充数据库的脚本。

服务器将使用正确的JSON进行响应,但是如果我几个小时后再回来检查它,则会收到需要回滚的错误,或者有时会收到MySQL服务器消失的2006错误。

人们建议我更改MySQL服务器上的超时设置,但这还没有解决任何问题。这是我的设置:

innodb_lock_wait_timeout = 3000

max_allowed_packet = 65536

net_write_timeout = 300

wait_timeout = 300

然后,当我查看RDS监视器时,它显示MySQL服务器保持连接打开了一段时间,直到超时。现在,如果我错了,请纠正我,但连接完成后是否应该关闭连接?似乎应用程序服务器一直在确保数据库连接存在,然后当MySQL服务器超时时,Flask / Flask-SQLAlchemy抛出错误并随之关闭应用程序服务器。

回答:

我认为它增加了什么

db.init_app(application)

在application.py中,此后没有错误。

以上是 Flask-SQLAlchemy:在回滚无效事务之前无法重新连接 的全部内容, 来源链接: utcz.com/qa/428921.html

回到顶部