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

标签 python mysql amazon-web-services flask flask-sqlalchemy

因此,我使用 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)

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

模型.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 中,从那以后就没有错误了。

关于python - Flask-SQLAlchemy:在回滚无效事务之前无法重新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31121948/

相关文章:

python - 计算日期列表中每月错误 bool 值的数量?

python - Django 时区 : How to compare time difference in days between 2 days across DST

Python 样式 : lowercase class names for "namespaces"?

amazon-web-services - 端点类型为 PRIVATE 的 Api 未定义资源策略

python - 如何将现有的 MySQL 数据库导入到 web2py 中?

java - 无法连接到 MySQL - Glassfish 和 Hibernate

php - Woocommerce 显示每种产品的总零售额

php - 对非对象调用成员函数execute()

amazon-web-services - AWS Lambda 无服务器部署要求提供 AWS 提供商凭证

powershell - 我可以使用 powershell 在一个命令中复制 s3 中的 "folder"吗?