【发布时间】:2015-09-16 06:52:23
【问题描述】:
所以我使用 Amazon Web Services RDS 来运行 MySQL 服务器,并使用 Python 的 Flask 框架来运行应用程序服务器,并使用 Flask-SQLAlchemy 来与 RDS 交互。
我的应用配置.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)
我有我的主应用程序.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 会抛出错误并随之关闭应用服务器。
任何建议都非常感谢,谢谢!
【问题讨论】:
标签: python mysql amazon-web-services flask flask-sqlalchemy