Flask SQLAlchemy:Postgres服务器重新启动时应用程序崩溃

时间:2020-02-04 21:07:17

标签: postgresql sqlalchemy flask-sqlalchemy

我有一个标准的flask_sqlalchemy设置和一个带有postgresql的AWS RDS。

我以标准方式初始化数据库适配器:

double sey = MathNet.Numerics.GoodnessOfFit.StandardError(Yest, Y, 7);

如果我重新启动RDS服务器,并且在重新启动过程中开始执行SELECT,则会得到:

psycopg2.OperationalError:由于管理员而终止连接 命令SSL连接已意外关闭

上述异常是以下异常的直接原因:

sqlalchemy.exc.OperationalError:(psycopg2.OperationalError) 由于管理员命令而终止连接SSL连接具有 意外关闭

我了解。该数据库不可用。

但是:之后,应用程序无法从这种情况中恢复,原因是:

sqlalchemy.exc.InvalidRequestError:在无效之前无法重新连接 交易回滚

上述异常是以下异常的直接原因:sqlalchemy.exc.StatementError:

(sqlalchemy.exc.InvalidRequestError)在无效之前无法重新连接 交易被回滚

我了解应用程序在重新启动期间会引发异常。

但是令我困惑的是它永远无法恢复。

没有写事务到数据库!我不明白该异常所描述的回滚。

编辑:

这是实现所有提交的方式:

from flask_sqlalchemy import SQLAlchemy
from flask import Flask

app = Flask(__name__)
db = SQLAlchemy()

db.init_app(app)

class Example(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(256))

但是没有提交触发异常。只有SELECTS。

1 个答案:

答案 0 :(得分:0)

执行此操作,它将为您session.rollback()进行修复。

如果要查找此错误,请将其包装在try / except-block中并执行session.rollback()。

编辑:

所以我测试了一些东西,并且我相信错误的原因在try / except块内。理想情况下,文档会说这是实现插入的方式:

  1. 创建Python对象
  2. 将其添加到会话中
  3. 参加会议

例如

>>> db.session.add(User(name="Flask", email="example@example.com"))
>>> db.session.commit()

就像删除一样:

>>> db.session.delete(me)
>>> db.session.commit()

对于查询,您不需要排他地提交,Flask-SQLAlchemy中的查询属性可以在Model类上为您完成。

为选择您而做:

users = User.query.all()

您的情况是:

 something = Example.query.all()

还有一件事,请您说明或提供更多有关为什么要实现以下提交的信息:

try: 
  db.session.commit() 
except Exception as e:                    
  db.session.rollback()

PS:我可能看错了您的上一次编辑内容!