一个基于Milvus向量数据库的异步ORM库,提供类似Django ORM的语法来管理和查询数据。
- 提供类似Django ORM的简洁API
- 完全异步支持,使用AsyncMilvusClient
- 支持多种数据类型:FloatVectorField、CharField、JsonField、BigIntField、FloatField等
- 支持向量搜索和标量过滤
- 支持动态字段
pip install pymilvus
# 然后直接使用本库import asyncio
from milvus_orm import connect, disconnect, Model, BigIntField, CharField, FloatVectorField, JsonField
async def main():
# 连接到Milvus服务器
await connect(uri="http://localhost:19530")
# 使用完后断开连接
await disconnect()
if __name__ == "__main__":
asyncio.run(main())class Product(Model):
# 设置集合名称(可选,默认为类名小写)
collection_name = "products"
# 定义字段
id = BigIntField(primary_key=True)
name = CharField(max_length=255)
description = CharField(max_length=1000)
price = FloatField()
vector = FloatVectorField(dim=768) # 768维向量
metadata = JsonField(nullable=True) # 可选的JSON字段# 创建集合(如果不存在)
await Product.create_collection()# 单个插入
product = Product(
id=1,
name="智能手表",
description="多功能智能手表",
price=999.99,
vector=[0.1, 0.2, ..., 0.9], # 768维向量
metadata={"brand": "品牌A", "color": "黑色"}
)
await product.save()
# 批量插入
products = [
Product(
id=i,
name=f"产品{i}",
vector=[0.1*i, 0.2*i, ..., 0.9*i],
price=100.0*i
)
for i in range(2, 10)
]
count = await Product.bulk_create(products)
print(f"成功创建了 {count} 个产品")# 获取单个对象
product = await Product.objects().get(id=1)
# 过滤查询
products = await Product.objects().filter("price > 500").all()
# 限制返回数量
products = await Product.objects().limit(10).all()
# 分页
products = await Product.objects().offset(10).limit(10).all()
# 计数
count = await Product.objects().filter("price > 500").count()
# 向量搜索
query_vector = [0.1, 0.2, ..., 0.9] # 768维查询向量
results = await Product.objects().search(
vector=query_vector,
field_name="vector",
metric_type="L2", # 距离度量方式
limit=5
).all()# 更新对象
product = await Product.objects().get(id=1)
await product.update(price=899.99, name="智能手表Pro")
# 删除对象
await product.delete()
# 批量删除
count = await Product.objects().filter("price < 200").delete()
print(f"删除了 {count} 个产品")目前支持的字段类型:
IntegerField- 32位整数BigIntField- 64位整数BooleanField- 布尔类型CharField- 可变长度字符串UUIDField- UUID类型(继承自CharField)FloatField- 浮点数JsonField- JSON类型,用于存储结构化数据FloatVectorField- 密集浮点向量SparseFloatVectorField- 稀疏浮点向量
Milvus支持的过滤操作符:
==- 等于!=- 不等于>- 大于<- 小于>=- 大于等于<=- 小于等于&&- 逻辑与||- 逻辑或()- 括号优先级
- 本库使用异步API,需要在异步环境中使用
- 对于更新操作,由于Milvus限制,采用了先删除后插入的方式
- 确保在使用前已经正确安装并启动了Milvus服务
- Python 3.7+
- pymilvus
MIT