Для полноты картины я получил эту работу, используя пользовательскую функцию соединения , как предложено @DanilaGanchar.
Чтобы настроить это в Flask-SQLAlchemy, вам нужно использовать v2.4.0 илибольше (которое было случайно выпущено только за день до того, как я задал этот вопрос ).Эта версия имеет конфигурацию SQLALCHEMY_ENGINE_OPTIONS
, которая позволяет передавать словарь kwargs для функции create_engine
SQLAlchemy.
Одно важное замечание: 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