Как я могу изменить URI Flask-SQLAlchemy после определенного периода времени? - PullRequest
1 голос
/ 26 апреля 2019

Я использую Flask-SQLAlchemy для подключения к базе данных Postgres в AWS RDS. Пароль для подключения к базе данных истекает каждые 15 минут, после чего мне нужно создать новый для новых подключений к базе данных (открытые подключения в порядке).

Я не могу понять, как настроить Flask-SQLAlchemy для использования функции для генерации параметра конфигурации SQLALCHEMY_DATABASE_URI. Вся документация и обсуждение этого вопроса касаются использования статического значения, установленного при запуске.

Я знаю, как это сделать, используя обычную SQLAlchemy для сессий с областями действия и т. Д. Но я действительно надеялся на решение с использованием Flask-SQLALchemy.

1 Ответ

0 голосов
/ 26 апреля 2019

Для полноты картины я получил эту работу, используя пользовательскую функцию соединения , как предложено @DanilaGanchar.

Чтобы настроить это в Flask-SQLAlchemy, вам нужно использовать v2.4.0 илибольше (которое было случайно выпущено только за день до того, как я задал этот вопрос ).Эта версия имеет конфигурацию SQLALCHEMY_ENGINE_OPTIONS, которая позволяет передавать словарь kwargs для функции create_engine SQLAlchemy.

Одно важное замечание: Flask-SQLAlchemy по-прежнему ожидает значение для SQLALCHEMY_DATABASE_URI, даже если ваша функция creator все равно обрабатывает создание соединения.

Таким образом, полное решение выглядит как

# config.py

def _get_conection():
    # Get all your connection information
    return psycopg2.connect(host=host, port=5432, password=password, ...

SQLALCHEMY_DATABASE_URI = "postgresql+pyscopg2://"
SQLALCHEMY_ENGINE_OPTIONS = {"creator": _get_connection()}
# More settings etc.
# app.py

from app import config
from app.db import db

def create_app():
    app = Flask(__name__)
    app.config_from_object(config)
    db.init_app(app)
    return app
...