Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一段时间后,如何更改炼金术URI?_Python_Postgresql_Flask_Flask Sqlalchemy_Rds - Fatal编程技术网

Python 在一段时间后,如何更改炼金术URI?

Python 在一段时间后,如何更改炼金术URI?,python,postgresql,flask,flask-sqlalchemy,rds,Python,Postgresql,Flask,Flask Sqlalchemy,Rds,我正在使用Flask SQLAlchemy连接到AWS RDS上的Postgres数据库。连接数据库的密码每15分钟过期一次,之后我需要为数据库的新连接生成一个新密码(打开的连接可以) 我不知道如何配置Flask SQLAlchemy以使用函数生成SQLAlchemy\u数据库\u URI配置参数。围绕这一点的所有文档和讨论都指向在启动时使用静态值集 我知道如何使用常规SQLAlchemy和作用域会话等来实现这一点,但我真的希望使用Flask SQLAlchemy来解决问题。为了完整起见,我使用

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

我不知道如何配置Flask SQLAlchemy以使用函数生成
SQLAlchemy\u数据库\u URI
配置参数。围绕这一点的所有文档和讨论都指向在启动时使用静态值集


我知道如何使用常规SQLAlchemy和作用域会话等来实现这一点,但我真的希望使用Flask SQLAlchemy来解决问题。

为了完整起见,我使用了@DanilaGanchar建议的类似方法来实现这一点

要在Flask SQLAlchemy中配置此功能,您需要使用v2.4.0或更高版本(只是顺便提一下)。该版本有一个配置,允许为SQLAlchemy的
create\u引擎
函数传入kwargs字典

一个重要的注意事项是,Flask SQLAlchemy仍然需要
SQLAlchemy\u DATABASE\u 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.

你有没有试着使用或?看起来像是你需要的。@DanilaGanchar,是的,我认为一个自定义连接函数可以工作,尽管只有两天前的Flask SQLAlchemy发行版才可以,这是非常幸运的。
{“creator”:\u get\u Connection()}
应该是
{“creator”:\u get\u Connection}
# 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