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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在一段时间后更改Flask-SQLAlchemy URI?相关的知识,希望对你有一定的参考价值。

我正在使用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)。该版本有一个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

以上是关于如何在一段时间后更改Flask-SQLAlchemy URI?的主要内容,如果未能解决你的问题,请参考以下文章

使用php在一段时间后动态更改网站背景

一段时间后,如何在小吃店自动关闭时更改 vuex 中的状态

如何在一段时间后开始活动?

如何让机器人在一段时间后删除消息

如何在 Flutter 中一段时间​​后切换小部件?

Angular 2:如何在一段时间后自动刷新整个页面