You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pyTigerGraph连接Docker中TigerGraph时出现401错误

问题背景

在Ubuntu机器的Docker容器中运行TigerGraph v4.1.2(也尝试过v4.2.0社区版),按照教程使用pyTigerGraph连接实例时,执行result = self.driver.gsql('ls')或self.secret = self.driver.createSecret(SECRETALIAS)步骤时触发401认证错误:

401 Client Error: for url: http://127.0.0.1:14240/gsql/v1/statements

最初误以为是未定义目标图GRAPHNAME,最终确认是凭证输入错误,现已解决该问题。需求是完成从连接TigerGraph、创建新图、获取密钥和令牌、加载数据到分析的完整流程。

完整操作流程

1. 确认Docker内TigerGraph服务状态

进入TigerGraph容器,执行以下命令检查核心服务是否正常运行:

gadmin status

确保gpe、gse、restpp等服务处于Running状态。

2. 安装匹配版本的pyTigerGraph

根据TigerGraph 4.x版本要求,安装对应版本的pyTigerGraph:

pip install pyTigerGraph>=0.10.0

3. 初始化TigerGraph连接

使用正确的凭证建立连接,核心参数说明:

  • host: 本地运行填127.0.0.1,远程容器填对应主机IP
  • username: 社区版默认用户名是tigergraph
  • password: 容器启动时设置的密码,可在容器内通过gadmin config get System.User.DefaultPassword查看
  • graphname: 先设为"global",创建新图后再切换

示例代码:

import pyTigerGraph as tg

# 配置参数
HOST = "127.0.0.1"
USERNAME = "tigergraph"
PASSWORD = "你的TigerGraph密码"
GRAPHNAME = "MySocialGraph"
SECRETALIAS = "my_app_secret"

# 初始化连接
driver = tg.TigerGraphConnection(
    host=HOST,
    username=USERNAME,
    password=PASSWORD,
    graphname=GRAPHNAME,
    useCert=False  # 社区版默认无需证书
)

# 验证连接有效性
print("连接状态:", driver.isConnected())

4. 创建新图结构

通过GSQL语句定义图的顶点和边类型,示例创建社交网络图:

# 定义建图GSQL语句
create_graph_gsql = f"""
CREATE GRAPH {GRAPHNAME} (
  VERTEX Person(PRIMARY_ID id INT, name STRING, age INT),
  VERTEX Post(PRIMARY_ID post_id INT, content STRING),
  EDGE Follow(FROM Person, TO Person),
  EDGE PostBy(FROM Post, TO Person)
)
"""

# 执行建图语句
driver.gsql(create_graph_gsql)

# 切换到新创建的图
driver.graphname = GRAPHNAME

5. 获取Secret与认证令牌

创建Secret

# 创建指定别名的Secret
secret = driver.createSecret(SECRETALIAS)
print("生成的Secret:", secret)

获取认证令牌

# 获取有效期1小时的令牌
token = driver.getToken(SECRETALIAS, secret)
print("认证令牌:", token)

# 让driver自动使用该令牌
driver.setToken(token)

6. 加载数据

支持两种加载方式,按需选择:

单条数据插入(API方式)

# 插入Person顶点
driver.upsertVertex("Person", 1, attributes={"name": "Alice", "age": 28})
driver.upsertVertex("Person", 2, attributes={"name": "Bob", "age": 32})

# 插入Post顶点
driver.upsertVertex("Post", 101, attributes={"content": "Hello TigerGraph!"})

# 插入Follow边
driver.upsertEdge("Person", 1, "Follow", "Person", 2)

# 插入PostBy边
driver.upsertEdge("Post", 101, "PostBy", "Person", 1)

CSV批量加载(GSQL方式)

将CSV文件放到容器可访问路径后,执行加载语句:

# 定义批量加载GSQL语句
load_data_gsql = f"""
USE GRAPH {GRAPHNAME}
BEGIN
  LOAD CSV WITH HEADER FROM "file:///tmp/persons.csv" TO VERTEX Person VALUES ($id, $name, $age);
  LOAD CSV WITH HEADER FROM "file:///tmp/posts.csv" TO VERTEX Post VALUES ($post_id, $content);
  LOAD CSV WITH HEADER FROM "file:///tmp/follows.csv" TO EDGE Follow VALUES ($from_id, $to_id);
END
"""

# 执行加载
driver.gsql(load_data_gsql)

7. 数据查询与分析

基础顶点查询

# 查询所有Person顶点
all_persons = driver.getVertices("Person")
print("所有Person顶点:", all_persons)

# 查询指定ID的Person顶点
alice_info = driver.getVertex("Person", 1)
print("Alice的信息:", alice_info)

自定义GSQL查询

创建并运行自定义查询,示例查询指定用户的关注者:

# 创建查询语句
create_query_gsql = f"""
USE GRAPH {GRAPHNAME}
CREATE QUERY get_user_followers(INT person_id) FOR GRAPH {GRAPHNAME} {{
  SetAccum<INT> @followers;
  Person = {{person_id}};
  Person = SELECT t FROM Person:s -(Follow)-> Person:t ACCUM s.@followers += t.id;
  PRINT Person.@followers;
}}
"""

# 安装查询
driver.gsql(create_query_gsql)
driver.gsql(f"INSTALL QUERY get_user_followers ON GRAPH {GRAPHNAME}")

# 运行查询
followers_result = driver.runInstalledQuery("get_user_followers", params={"person_id": 1})
print("Alice的关注者ID:", followers_result)

内容的提问来源于stack exchange,提问作者Ameya Patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 05:38:19