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

问题描述 投票:1回答:1

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

我无法弄清楚如何配置Flask-SQLAlchemy以使用函数生成SQLALCHEMY_DATABASE_URI配置参数。所有关于此的文档和讨论都指向使用启动时设置的静态值。

我知道如何使用常规SQLAlchemy和范围会话等来做这件事。但我真的希望使用Flask-SQLALchemy的解决方案。

python postgresql flask flask-sqlalchemy rds
1个回答
0
投票

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

要在Flask-SQLAlchemy中进行配置,您需要使用v2.4.0或更高版本(顺便提一下只有released the day before I asked this question)。该版本有一个SQLALCHEMY_ENGINE_OPTIONS配置,允许传入一个字典的kwargs为SQLAlchemy的create_engine功能。

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

推荐问答