当前位置: 首页 > 面试题库 >

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

慕宜民
2023-03-14
问题内容

因此,我使用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中,此后没有错误。



 类似资料:
  • 问题内容: 首先,我在StackOverflow上发现了很多与此相关的线程,但是它们都没有真正帮助我,所以很抱歉提出可能重复的问题。 我正在使用spring-test运行JUnit测试,我的代码如下所示 我的问题是我希望我的测试不影响其他测试。所以我想为每个测试创建类似回滚的内容。我为此进行了很多搜索,但到目前为止我什么都没找到。我为此使用Hibernate和MySql 问题答案: 只需在测试之上

  • 问题内容: 我是Spark的新生,并尝试完成Spark教程: 指向教程的链接 在本地计算机(Win10 64,Python 3,Spark 2.4.0)上安装它并设置所有环境变量(HADOOP_HOME,SPARK_HOME等)后,我试图通过WordCount.py文件运行一个简单的Spark作业: 从终端运行后: 我得到以下错误。我检查(逐行注释)它在崩溃 知道我应该检查些什么才能使其正常工作吗

  • 问题内容: 我在Mac上使用Flask(python软件包)时,第一次写css时显示正常。但是,当我更新它并尝试检查它时,我只看到第一个CSS样式。我尝试重新启动终端,以及重新安装Flask。有什么建议?谢谢。以下是HTML: 这是CSS: 问题答案: 如前所述,问题与浏览器缓存有关。 为了解决这个问题,你可以向静态(css,js)链接中添加一些动态变量。我更喜欢每个文件的上次修改时间戳。 这是一

  • 尝试使用以(freeTDS)作为驱动程序的SQLAlchemy连接到SQL server;如果直接使用,则连接成功: 但当我使用SQLAlchemy时,它失败了,出现了一个神秘的错误: 下面是完整的堆栈跟踪: 回溯(最近一次调用):文件“/users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqla

  • 我正在尝试创建一个事务方法,该方法调用其他几个事务方法以保存一些相互依赖的db实体。如果任何调用失败,我希望事务完全回滚。但是,这不是观察到的行为。这是我的代码: 也有and,但是当事务在第二次调用时失败时,第一个被提交。