Как создать клиент Vecs с использованием механизма SQLAlchemy на базе коннектора Google CloudPython

Программы на Python
Anonymous
 Как создать клиент Vecs с использованием механизма SQLAlchemy на базе коннектора Google Cloud

Сообщение Anonymous »

Я пытаюсь использовать эту библиотеку здесь и на странице GitHub, но у меня возникла большая проблема. При попытке создать клиент Vecs требуется только строка подключения Client(connection_string="postgres_connection_string_here")
Однако мой Postgres развернут в Google Cloud, и для подключения к нему я создаю соединитель Google Cloud и вместе с ним механизм SQLAlchemy:

Код: Выделить всё

from google.cloud.sql.connector import Connector
connector = Connector()

try:
# Creator function for SQLAlchemy engine
def getconn():
return connector.connect(
CLOUD_SQL_INSTANCE,
"pg8000",
user=DATABASE_USER,
password=DATABASE_PASSWORD,
db=DATABASE_NAME,
)

# Create SQLAlchemy engine
engine = create_engine("postgresql+pg8000://", creator=getconn)
это работает для моего движка базы данных SQLAlchemy, и я могу успешно выполнить транзакцию.
Однако vecs не позволяет создать клиент, передав создателя движка или готовый движок SQLAlchemy. Кажется, он принимает только строку подключения.
Я пропатчил метод __init__ класса Client класса Vecs, и он сработал:

Код: Выделить всё

from sqlalchemy import text
from vecs import Client

from books_vector_db.utils.db import engine

def _patched_init(self, engine):
self.engine = engine
from sqlalchemy import MetaData
from sqlalchemy.orm import sessionmaker

self.meta = MetaData(schema="vecs")
self.Session = sessionmaker(self.engine)

with self.Session() as sess:
with sess.begin():
sess.execute(text("create schema if not exists vecs;"))
sess.execute(text("create extension if not exists vector;"))
self.vector_version: str = sess.execute(
text(
"select installed_version from pg_available_extensions where name = 'vector' limit 1;"
)
).scalar_one()

Client.__init__ = _patched_init

def get_vecs_client() -> Client:
return Client(engine)
но в нашем проекте не могу. Есть идеи, как создать клиент vecs для моей базы данных GCP Postgres без взлома библиотеки? Я хочу по-прежнему иметь возможность использовать клиентский соединитель Google, потому что, если я не ошибаюсь, это рекомендуемый и самый безопасный способ сделать это.
Есть идеи, как использовать готовый движок SQLAlchemy без обезьяньих исправлений библиотеки vec или более законный способ подключения клиента vecs к моей базе данных GCP?

Подробнее здесь: https://stackoverflow.com/questions/797 ... chemy-engi

Вернуться в «Python»