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

时间:2019-04-25 22:55:14

标签: python postgresql flask flask-sqlalchemy rds

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

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

我知道如何使用具有范围的会话等常规SQLAlchemy来做到这一点。但我确实希望使用Flask-SQLALchemy解决方案。

1 个答案:

答案 0 :(得分:0)

出于完整性考虑,我使用{@ 3anan建议的custom connection function}进行了这项工作。

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

重要的一点是,即使您的SQLALCHEMY_DATABASE_URI函数正在处理创建连接的问题,Flask-SQLAlchemy仍然期望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