semantic-kernel icon indicating copy to clipboard operation
semantic-kernel copied to clipboard

Python: Update Postgres Connector to new Design

Open sophialagerkranspandey opened this issue 1 year ago • 1 comments

Discussed in https://github.com/microsoft/semantic-kernel/discussions/6988

Originally posted by jamesmkfoo23 June 27, 2024 Hi, is postgres supported with Python?

Azure docs for Azure PostgreSQL Flexible python shows the usage psycopg2 https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/connect-python?tabs=cmd%2Cpasswordless#create-a-table-and-insert-data . I believe therefore this should be the correct library psycopg2.

Trying to use the connector but i'm getting this error when i try to import the postgres memory store

from semantic_kernel.connectors.memory.postgres import PostgresMemoryStore

semantic_kernel\connectors\memory\postgres\__init__.py:3
  from semantic_kernel.connectors.memory.postgres.postgres_memory_store import (PostgresMemoryStore)

semantic_kernel\connectors\memory\postgres\postgres_memory_store.py:9
  from psycopg import Cursor
  
ModuleNotFoundError: No module named 'psycopg'

Is there any samples for SK pg memory connector?

sophialagerkranspandey avatar Jun 28 '24 15:06 sophialagerkranspandey

Install Dependencies: Make sure you have the required dependencies installed: pip install psycopg pip install semantic-kernel

from semantic_kernel import Kernel from semantic_kernel.connectors.memory.postgres import PostgresMemoryStore import psycopg2

Database connection parameters

db_params = { 'dbname': 'your_database_name', 'user': 'your_username', 'password': 'your_password', 'host': 'your_host', 'port': 'your_port' }

Create a connection to the database

connection = psycopg2.connect(**db_params)

Initialize the PostgresMemoryStore

memory_store = PostgresMemoryStore(connection)

Initialize the Kernel with the memory store

kernel = Kernel(memory_store=memory_store)

Example: Using the memory store

Store some data

memory_store.store('some_key', 'some_value')

Retrieve stored data

value = memory_store.retrieve('some_key') print(f'Retrieved value: {value}')

Close the connection when done

connection.close()

Explanation: Install Dependencies: Ensure you have the psycopg and semantic-kernel packages installed. Database Connection Parameters: Update the db_params dictionary with your PostgreSQL database credentials. Create Connection: Establish a connection to the PostgreSQL database using psycopg2.connect. Initialize PostgresMemoryStore: Create an instance of PostgresMemoryStore using the database connection. Initialize Kernel: Pass the memory store to the Kernel initializer. Example Usage: Demonstrates storing and retrieving data from the memory store. Close Connection: Ensure the database connection is closed after operations are completed.

MaheshBudarapu avatar Jun 28 '24 19:06 MaheshBudarapu

@evchaki is anyone working on this bug?

Niladri24dutta avatar Sep 12 '24 16:09 Niladri24dutta

@eavanvalkenburg - is this one you are working on with the new memory package?

evchaki avatar Sep 12 '24 18:09 evchaki

@Niladri24dutta @MaheshBudarapu all memory connectors including this one will move over to the new memory connector model, over the next few weeks, if you want to contribute that would be great! The Azure AI Search, Redis and Qdrant connectors already have a new version (it is based on VectorStore and VectorStoreRecordCollection), we are finalizing the search side of things (CRUD is in those base classes), so once that is finalized then we can push to port the others, but you could give a start to that effort! We'll also keep this issue open to make sure we check the postgres package used.

eavanvalkenburg avatar Sep 16 '24 14:09 eavanvalkenburg