Я использую кол-sqlalchemy в своем приложении. DB - postgresql 9.3. У меня есть простая инициализация БД, модель и представление:Flask-sqlalchemy потерять соединение после перезапуска сервера БД
from config import *
from flask import Flask, request, render_template
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://%s:%[email protected]%s/%s' % (DB_USER, DB_PASSWORD, HOST, DB_NAME)
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
login = db.Column(db.String(255), unique=True, index=True, nullable=False)
db.create_all()
db.session.commit()
@app.route('/users/')
def users():
users = User.query.all()
return '1'
И все работает отлично. Но когда происходит сервер БД перезапуска (sudo service postgresql restart
), по первому требованию к /users/
я получаю sqlalchemy.exc.OperationalError
:
OperationalError: (psycopg2.OperationalError) terminating connection due to administrator command
SSL connection has been closed unexpectedly
[SQL: ....
Есть ли способ, чтобы возобновить соединение внутри зрения или установки опоки-SQLAlchemy другим способом для возобновления соединения автоматически?
ОБНОВЛЕНИЕ.
Я закончил с использованием ясной SQLAlchemy, объявляя движок, метаданные и db_session для каждого представления, где мне это очень нужно.
Это не решение вопроса, просто «взломать».
Так что вопрос открыт. Я уверен, хорошо бы найти решение для этого :)
К сожалению, это не поможет. Первый запрос после перезапуска сервера БД это событие не выполняется. И если функция вызова ping_connection (params) внутри отображается, это не поможет. – user1931780
@ user1931780 - interesting - Я запустил код через отладчик PyCharm (как на Windows, так и на Ubuntu), и перезагрузка была обработана, как и ожидалось. Я перечислил используемые версии библиотеки. – pjcunningham
Отличный пост! Работает так, как ожидалось! Большое спасибо @pjcunningham! –