使用pyTigerGraph创建TigerGraph schema报Connection Refused错误
问题原因
- 实例化连接后打印
Connected不代表连接有效:pyTigerGraph 0.9.1版本初始化TigerGraphConnection对象时,仅会在本地存储传入的连接参数,不会主动发起网络请求校验连通性,因此这行输出不能作为连接正常的判断依据。 - 报错核心诱因为端口配置不匹配:pyTigerGraph 0.9.1的默认端口配置适配本地自部署的TigerGraph实例,默认REST++服务端口为9000、GSQL服务端口为14240;但TigerGraph Cloud托管实例的所有服务均通过HTTPS 443端口做反向代理,未手动指定端口时,调用
gsql()方法会向不存在的14240端口发起请求,触发错误码111的Connection refused报错,该问题和用户名、密码配置无关。 - 语法兼容问题:GSQL脚本中使用的
USE GLOBAL语法不适用于TigerGraph Cloud新托管实例,云实例默认不开放全局schema操作权限,直接执行会触发权限类错误。
修复方案
- 实例化连接时手动补充适配云实例的参数:将
restppPort、gsqlPort均设置为443,开启useCert=True适配HTTPS证书校验,同时传入已创建的目标图名作为graphname参数。 - 调整GSQL脚本逻辑:删除脚本中的
USE GLOBAL行,所有schema创建操作会在指定的目标图下执行。如果实例上还未创建目标图,先执行创建图的GSQL命令,等待图创建完成后再执行schema创建操作。 - 可选兼容方案:将pyTigerGraph升级至1.x及以上稳定版本,新版本已内置TigerGraph Cloud实例的端口适配规则,无需手动指定端口参数即可正常连接。
参考修正代码
连接初始化部分
# Imports import pyTigerGraph as tg import json import pandas as pd # Connection parameters hostName = "https://DOMAIN.i.tgcloud.io" userName = "tigergraph" password = "XXXXXX" # 替换为自己实例上创建的目标图名 graphName = "替换为你的图名" conn = tg.TigerGraphConnection( host=hostName, username=userName, password=password, graphname=graphName, restppPort=443, gsqlPort=443, useCert=True ) # 执行LS命令验证连通性,正常会返回实例内的资源列表 print(conn.gsql("LS")) # 若未创建图,先执行下方命令创建图,创建完成后再执行后续schema操作 # print(conn.gsql(f"CREATE GRAPH {graphName}()"))
Schema创建部分
# DEFINE / CREATE ALL EDGES AND VERTICES results = conn.gsql(''' CREATE VERTEX Person (PRIMARY_ID id STRING, name STRING, email STRING, username STRING, created_at DATETIME) WITH primary_id_as_attribute="true" CREATE VERTEX Post (PRIMARY_ID id STRING, content STRING, posted_date DATETIME, deleted BOOL) WITH primary_id_as_attribute="true" CREATE VERTEX Hashtag (PRIMARY_ID tag STRING) WITH primary_id_as_attribute="true" CREATE VERTEX Message (PRIMARY_ID id STRING, subject STRING, body STRING) WITH primary_id_as_attribute="true" CREATE DIRECTED EDGE posted (From Person, To Post, post_date DATETIME) WITH REVERSE_EDGE="reverse_posted" CREATE DIRECTED EDGE liked (From Person, To Post, like_date DATETIME) WITH REVERSE_EDGE="reverse_liked" CREATE DIRECTED EDGE has_tag (From Post, To Hashtag) WITH REVERSE_EDGE="reverse_has_tag" CREATE DIRECTED EDGE sent_message (From Person, To Message, to_person STRING, sent_date DATETIME) WITH REVERSE_EDGE="reverse_sent_message" CREATE DIRECTED EDGE received_message (From Message, To Person, from_person STRING, receive_date DATETIME, opened_date DATETIME) WITH REVERSE_EDGE="reverse_received_message" ''') print(results)
内容的提问来源于stack exchange,提问作者RishiC
相关产品推荐
相关产品推荐

