Я использую psycopg3 для инициализации AsyncConnectionPool. Моя база данных Postgres размещена в Azure. Я подключаюсь через управляемое удостоверение. Поэтому я получаю от Microsoft токен, действительный в течение одного часа. Инициализация пула и первые соединения (в течение часа, когда токен действителен) работают нормально. Когда срок действия токена истек и необходимо установить новые соединения, я получаю следующую ошибку: «Ошибка подключения в пуле 1: соединение не выполнено: соединение с сервером по адресу «127.0.0.1», порт 5433 не выполнено: FATAL: токен доступа Срок действия истек. Пожалуйста, приобретите новый токен и повторите попытку."
Поэтому я думаю, что строка conninfo сохранена. Но почему-то мне приходится вызывать get_conninfo() каждый раз, когда должно быть установлено новое соединение. Есть идеи, как решить эту проблему?
Вот часть моей реализации.
@classmethod
async def connect(cls):
"""Initializes the connection pool."""
async with cls._lock:
if cls._instance is None:
cls._instance = cls()
if not hasattr(cls._instance, 'pool'):
# Retrieve connection parameters
cls._instance.user = settings.user
cls._instance.host = settings.host
cls._instance.port = settings.port
cls._instance.dbname = settings.dbname
cls._instance.connection_type = settings.connection_type
if cls._instance.connection_type == "managed_identity":
cls._instance.credential = ManagedIdentityCredential()
else:
cls._instance.password = settings.pgvector.pgvector_password.get_secret_value()
cls._instance.pool = AsyncConnectionPool(
conninfo=await cls._instance.get_conninfo(),
open=True
)
await cls._instance.pool.open()
logger.info("Async database connection pool initialized in PostgresClient.")
@classmethod
async def get_conninfo(cls) -> str:
"""Returns connection info string based on the connection type."""
if cls._instance.connection_type == "managed_identity"
# retrieve token from Microsoft
access_token = cls._instance.credential.get_token(
"https://ossrdbms-aad.database.windows.net/.default"
)
return (
f"dbname={cls._instance.dbname} host={cls._instance.host} "
f"port={cls._instance.port} sslmode=require user={cls._instance.user} "
f"password={access_token.token}"
else:
...
Подробнее здесь: https://stackoverflow.com/questions/793 ... ectionpool
Обновите токен подключения в ConnectionPool psycopg3. ⇐ Python
Программы на Python
-
Anonymous
1737470322
Anonymous
Я использую psycopg3 для инициализации AsyncConnectionPool. Моя база данных Postgres размещена в Azure. Я подключаюсь через управляемое удостоверение. Поэтому я получаю от Microsoft токен, действительный в течение одного часа. Инициализация пула и первые соединения (в течение часа, когда токен действителен) работают нормально. Когда срок действия токена истек и необходимо установить новые соединения, я получаю следующую ошибку: «Ошибка подключения в пуле 1: соединение не выполнено: соединение с сервером по адресу «127.0.0.1», порт 5433 не выполнено: FATAL: токен доступа Срок действия истек. Пожалуйста, приобретите новый токен и повторите попытку."
Поэтому я думаю, что строка conninfo сохранена. Но почему-то мне приходится вызывать get_conninfo() каждый раз, когда должно быть установлено новое соединение. Есть идеи, как решить эту проблему?
Вот часть моей реализации.
@classmethod
async def connect(cls):
"""Initializes the connection pool."""
async with cls._lock:
if cls._instance is None:
cls._instance = cls()
if not hasattr(cls._instance, 'pool'):
# Retrieve connection parameters
cls._instance.user = settings.user
cls._instance.host = settings.host
cls._instance.port = settings.port
cls._instance.dbname = settings.dbname
cls._instance.connection_type = settings.connection_type
if cls._instance.connection_type == "managed_identity":
cls._instance.credential = ManagedIdentityCredential()
else:
cls._instance.password = settings.pgvector.pgvector_password.get_secret_value()
cls._instance.pool = AsyncConnectionPool(
conninfo=await cls._instance.get_conninfo(),
open=True
)
await cls._instance.pool.open()
logger.info("Async database connection pool initialized in PostgresClient.")
@classmethod
async def get_conninfo(cls) -> str:
"""Returns connection info string based on the connection type."""
if cls._instance.connection_type == "managed_identity"
# retrieve token from Microsoft
access_token = cls._instance.credential.get_token(
"https://ossrdbms-aad.database.windows.net/.default"
)
return (
f"dbname={cls._instance.dbname} host={cls._instance.host} "
f"port={cls._instance.port} sslmode=require user={cls._instance.user} "
f"password={access_token.token}"
else:
...
Подробнее здесь: [url]https://stackoverflow.com/questions/79359145/refresh-a-connection-token-in-psycopg3-connectionpool[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия