我有一个标准的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。
答案 0 :(得分:0)
执行此操作,它将为您session.rollback()
进行修复。
如果要查找此错误,请将其包装在try / except-block中并执行session.rollback()。
所以我测试了一些东西,并且我相信错误的原因在try / except块内。理想情况下,文档会说这是实现插入的方式:
例如
>>> 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:我可能看错了您的上一次编辑内容!