如何在一段时间后更改 Flask-SQLAlchemy URI?

How can I change the Flask-SQLAlchemy URI after a certain period of time?

我正在使用 Flask-SQLAlchemy 连接到 AWS RDS 上的 Postgres 数据库。连接数据库的密码每15分钟过期一次,之后我需要为新的数据库连接生成一个新密码(打开连接就可以)。

我不知道如何配置 Flask-SQLAlchemy 以使用函数生成 SQLALCHEMY_DATABASE_URI 配置参数。围绕这一点的所有文档和讨论都指向在启动时使用静态值集。

我知道如何使用带有范围会话等的常规 SQLAlchemy 来做到这一点。但我真的希望使用 Flask-SQLALchemy 来解决这个问题。

为了完整起见,我使用@DanilaGanchar 建议的 custom connection function 完成了这项工作。

要在 Flask-SQLAlchemy 中配置它,您需要使用 v2.4.0 或更高版本(顺便说一下,这只是 released the day before I asked this question). That version has a SQLALCHEMY_ENGINE_OPTIONS 配置,它允许为 SQLAlchemy 的 create_engine 函数传入一个 kwargs 字典.

一个重要的注意事项是 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