PostgreSQL pgvector extension support for Python with vector operations and similarity search across multiple database libraries
npx @tessl/cli install tessl/pypi-pgvector@0.4.0PostgreSQL pgvector extension support for Python, enabling high-performance vector operations and similarity search in PostgreSQL databases. pgvector provides comprehensive integration with major Python database libraries including Django, SQLAlchemy, SQLModel, Psycopg 3, Psycopg 2, asyncpg, pg8000, and Peewee.
pip install pgvectornumpy (required)from pgvector import Vector, HalfVector, SparseVector, BitFramework-specific imports:
# Django integration
from pgvector.django import VectorField, HalfVectorField, SparseVectorField, BitField
from pgvector.django import L2Distance, CosineDistance, MaxInnerProduct, L1Distance
from pgvector.django import HammingDistance, JaccardDistance, IvfflatIndex, HnswIndex
# SQLAlchemy integration
from pgvector.sqlalchemy import VECTOR, HALFVEC, SPARSEVEC, BIT
from pgvector.sqlalchemy import avg, sum
# Database drivers
from pgvector.psycopg import register_vector, register_vector_async
from pgvector.psycopg2 import register_vector
from pgvector.asyncpg import register_vectorimport numpy as np
from pgvector import Vector, HalfVector, SparseVector, Bit
# Create standard vectors (32-bit float)
vector = Vector([1.5, 2.0, 3.5])
vector_from_numpy = Vector(np.array([1, 2, 3], dtype=np.float32))
# Create half-precision vectors (16-bit float) for memory efficiency
half_vector = HalfVector([1.5, 2.0, 3.5])
# Create sparse vectors for high-dimensional data with many zeros
sparse_vector = SparseVector({0: 1.0, 100: 2.5, 500: 3.0}, 1000)
sparse_from_dense = SparseVector([1.0, 0.0, 0.0, 2.5])
# Create bit vectors for binary operations
bit_vector = Bit([True, False, True, False])
bit_from_string = Bit("1010")
# Convert between formats
dense_list = vector.to_list() # [1.5, 2.0, 3.5]
numpy_array = vector.to_numpy() # numpy array
dimensions = vector.dimensions() # 3
# Database serialization
text_format = vector.to_text() # PostgreSQL text format
binary_format = vector.to_binary() # PostgreSQL binary formatpgvector's architecture is built around four core vector types and comprehensive database integration:
This design enables seamless vector operations across the entire Python database ecosystem while maintaining high performance through PostgreSQL's native pgvector extension.
The foundation of pgvector providing four distinct vector types optimized for different use cases: standard precision vectors, memory-efficient half vectors, sparse vectors for high-dimensional data, and binary vectors for bit operations.
class Vector:
def __init__(self, value): ...
def dimensions(self) -> int: ...
def to_list(self) -> list: ...
def to_numpy(self) -> np.ndarray: ...
class HalfVector:
def __init__(self, value): ...
def dimensions(self) -> int: ...
def to_list(self) -> list: ...
class SparseVector:
def __init__(self, value, dimensions=None): ...
def dimensions(self) -> int: ...
def indices(self) -> list: ...
def values(self) -> list: ...
class Bit:
def __init__(self, value): ...
def to_list(self) -> list: ...
def to_numpy(self) -> np.ndarray: ...Complete Django ORM support with vector field types, distance functions, and indexing capabilities for building vector-powered Django applications with familiar ORM patterns.
class VectorField(Field): ...
class HalfVectorField(Field): ...
class SparseVectorField(Field): ...
class BitField(Field): ...
class L2Distance(Func): ...
class CosineDistance(Func): ...
class HnswIndex(Index): ...
class IvfflatIndex(Index): ...Native SQLAlchemy types and functions providing full vector support for SQLAlchemy applications with type safety and query builder integration.
class VECTOR(TypeDecorator): ...
class HALFVEC(TypeDecorator): ...
class SPARSEVEC(TypeDecorator): ...
class BIT(TypeDecorator): ...
def avg(*args): ...
def sum(*args): ...Direct database driver integration for applications using raw PostgreSQL connections, providing vector type registration and serialization across all major Python PostgreSQL drivers.
# Psycopg 3
def register_vector(context): ...
def register_vector_async(context): ...
# Psycopg 2, asyncpg, pg8000
def register_vector(connection): ...Peewee ORM field types for vector operations in Peewee-based applications with full vector type support and query integration.
class VectorField(Field): ...
class HalfVectorField(Field): ...
class SparseVectorField(Field): ...
class FixedBitField(Field): ...