콘텐츠로 이동

Psycopg3

이 예제는 Psycopg3를 직접 사용합니다. 매개변수 바인딩과 결괏값 변환을 위해 AkasicDB vector type을 등록해야 하며, 이를 위해 register_vector() 함수를 호출합니다.

설치

pip install "akasicdb"

예제

import psycopg

from akasicdb.psycopg import register_vector
from akasicdb.types import Hnsw, IndexOption

DB_URL = "postgresql://postgres:mysecretpassword@localhost:5432/postgres"

with psycopg.connect(DB_URL) as conn:
    conn.execute("CREATE EXTENSION IF NOT EXISTS akasicdb")
    conn.execute("SELECT akasicdb_admin.initialize()")
    register_vector(conn)

    conn.execute("DROP TABLE IF EXISTS documents")
    conn.execute("""
        CREATE TABLE documents (
            id SERIAL PRIMARY KEY,
            text TEXT NOT NULL,
            embedding vector(3) NOT NULL
        )
    """)

    conn.execute(
        "INSERT INTO documents (text, embedding) VALUES (%s, %s)",
        ("hello world", [1.0, 2.0, 3.0]),
    )
    conn.execute(
        "INSERT INTO documents (text, embedding) VALUES (%s, %s)",
        ("hello akasicdb", [1.0, 3.0, 4.0]),
    )

    conn.execute(
        "CREATE INDEX embedding_idx ON documents USING vectoron "
        "(embedding vector_l2_ops) WITH (options=$${}$$)".format(
            IndexOption(index=Hnsw(), threads=1).dumps()
        )
    )

    rows = conn.execute(
        "SELECT text, embedding <-> %s AS distance "
        "FROM documents ORDER BY distance LIMIT 5",
        ([1.0, 2.0, 3.5],),
    ).fetchall()

    for row in rows:
        print(row)

    conn.commit()

psycopg.connect()postgresql://... 형태의 Psycopg connection URL을 받습니다.