我正在使用Flask-SQLAlchemy连接到AWS RDS上的Postgres数据库。连接数据库的密码每15分钟过期一次,此后,我需要为数据库的新连接生成一个新密码(可以使用开放连接)。
我不知道如何配置Flask-SQLAlchemy以使用函数来生成SQLALCHEMY_DATABASE_URI
配置参数。关于此的所有文档和讨论都指向在启动时使用静态值集。
我知道如何使用具有范围的会话等常规SQLAlchemy来做到这一点。但我确实希望使用Flask-SQLALchemy解决方案。
答案 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