我正在使用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