sqlalchemy 支持 postgresql 向量插件 pgvector vector

创建日期: 2024-04-08 11:12 | 作者: 风波 | 浏览次数: 23 | 分类: SQLAlchemy

来源:https://github.com/pgvector/pgvector-python?tab=readme-ov-file#sqlalchemy

1. 安装包

代码仓库:https://github.com/pgvector/pgvector-python

pip install pgvector

2. 创建表

session.execute(text('CREATE EXTENSION IF NOT EXISTS vector'))
from pgvector.sqlalchemy import Vector
#
class Item(Base):
    embedding = mapped_column(Vector(3))

3. 数据操作

item = Item(embedding=[1, 2, 3])
session.add(item)
session.commit()
session.scalars(select(Item).order_by(Item.embedding.l2_distance([3, 1, 2])).limit(5))
session.scalars(select(Item.embedding.l2_distance([3, 1, 2])))
session.scalars(select(Item).filter(Item.embedding.l2_distance([3, 1, 2]) < 5))
from sqlalchemy.sql import func
#
session.scalars(select(func.avg(Item.embedding))).first()

4. 创建索引

index = Index(
    'my_index',
    Item.embedding,
    postgresql_using='hnsw',
    postgresql_with={'m': 16, 'ef_construction': 64},
    postgresql_ops={'embedding': 'vector_l2_ops'}
)
# or
index = Index(
    'my_index',
    Item.embedding,
    postgresql_using='ivfflat',
    postgresql_with={'lists': 100},
    postgresql_ops={'embedding': 'vector_l2_ops'}
)
index.create(engine)
23 浏览
26 爬虫
0 评论