如何用Python开发Milvus向量数据库实现查询?
摘要:一、前置准备:环境与依赖 Milvus 环境要求 版本:milvus_2.6.9 Python 依赖安装 pip install pymilvus==2.5.0 二、核心知识点:Milvus RBAC 权限体系 核心概念 角色(Role):
一、前置准备:环境与依赖
Milvus 环境要求
版本:milvus_2.6.9
Python 依赖安装
pip install pymilvus==2.5.0
二、核心知识点:Milvus RBAC 权限体系
核心概念
角色(Role):权限的集合,如 test_role
权限(Privilege):具体操作权限,如 Insert/Search
作用对象:权限生效的范围,如 Collection/Database
权限粒度:集合级(核心)、数据库级、分区级
默认角色:root(超级管理员,拥有所有权限)
三、实战操作:角色与权限管理(Python 实现)
1. 连接 Milvus(带权限认证)
核心函数:connections.connect()
关键参数:uri(服务地址)、token(用户名密码)、db_name(指定数据库)
注意:未指定 db_name 时默认连接 default 数据库
2. 角色管理:创建 / 删除角色
实例化 Role 对象:role = Role("test_role")
创建角色:role.create()(需 root 权限,重复创建会报错)
删除角色:role.drop()(谨慎操作,删除后角色关联权限全部失效)
3. 权限操作:授予 / 收回权限
授予权限:role.grant(对象类型, 对象名称, 具体权限)
示例:role.grant("Collection", "*", "Insert")(给角色授予所有集合的插入权限)
通配符:* 表示 “所有”,可替换为具体集合名(如 "user_vector")
收回权限:role.revoke(对象类型, 对象名称, 具体权限)
示例:role.revoke("Collection", "*", "Insert")
4. 权限查询:校验权限配置
全量查询:role.list_grants()(查看角色的所有权限)
精准查询:role.list_grant(对象类型, 对象名称)(仅查看指定类型权限)
应用场景:权限配置后校验、问题排查
5. 核心清单:Milvus 集合级所有可配置权限
分类讲解权限:
集合管理:CreateCollection/DropCollection 等
数据操作:Insert/Search/Query 等
索引管理:CreateIndex/DropIndex 等
分区管理:CreatePartition/DropPartition 等
注意点:删除角色时,需要先将该角色的权限都收回,否则会报错
看代码实现:
# 过滤 pymilvus 依赖的 pkg_resources 废弃警告(setuptools≥81 版本触发)
import warnings
warnings.filterwarnings("ignore", message=".*pkg_resources is deprecated as an API.*")
# 导入 Milvus Python 客户端核心模块
# connections:用于连接 Milvus 服务
# Role:用于 Milvus 角色与权限管理(RBAC 权限体系)
from pymilvus import connections, Role
def connect_to_milvus(db_name="default"):
"""
连接 Milvus 向量数据库
:param db_name: 要连接的数据库名称,默认使用 Milvus 内置的 default 数据库
:return: None
注意:
1. uri 格式为 http://<ip>:<port>,Milvus 2.x 默认端口 19530
2. token 格式为 <用户名>:<密码>,默认管理员账号 root,密码需替换为实际值(示例为 Milvus)
3. 若未指定 db_name,默认连接 default 数据库
"""
print(f"开始连接 Milvus 数据库,目标数据库:{db_name}\n")
try:
# 建立 Milvus 连接
connections.connect(
uri="http://192.168.211.128:19530", # Milvus 服务地址
token="root:Milvus", # 认证令牌(用户名密
