Psycopg3¶
이 예제는 Psycopg3를 직접 사용합니다. 매개변수 바인딩과 결괏값 변환을 위해 AkasicDB vector type을 등록해야 하며, 이를 위해 register_vector() 함수를 호출합니다.
설치¶
예제¶
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을 받습니다.