Colab环境下Python调用TigerGraph GSQL出现多行字符串EOF错误如何解决
问题原因
该报错由两个常见原因导致:
- Python解析三重单引号包裹的多行字符串时,误识别了字符串内部的特殊字符边界,触发EOF(文件结束)异常
- GSQL语句格式不规范,CREATE QUERY语句结束的
}后缺少分号分隔符,导致语句解析失败
解决方法
优先尝试修改字符串声明方式,将三重单引号改为带r前缀的三重双引号(声明为原始字符串,避免Python自动转义特殊字符),同时补全CREATE QUERY语句结尾的分号,修改后的代码如下:
print(conn.gsql(r""" CREATE QUERY accountActivity() FOR GRAPH AMLSim { SumAccum<DOUBLE> @s_sumAmt, @r_sumAmt; SumAccum<DOUBLE> @s_txCnt, @r_txCnt; MinAccum<DOUBLE> @s_minAmt, @r_minAmt; MaxAccum<DOUBLE> @s_maxAmt, @r_maxAmt; AvgAccum @s_avgAmt, @r_avgAmt; Seed = {Account.*}; acctSend = SELECT tgt FROM Seed:s -(Send_Transaction:e)-> Transaction:tgt ACCUM s.@s_sumAmt += tgt.amount, s.@s_txCnt += 1, s.@s_minAmt += tgt.amount, s.@s_maxAmt += tgt.amount, s.@s_avgAmt += tgt.amount POST-ACCUM s.current_balance = s.@s_sumAmt - s.init_balance, s.min_send_tx = s.@s_minAmt, s.max_send_tx = s.@s_maxAmt, s.avg_send_tx = s.@s_avgAmt, s.cnt_send_tx = s.@s_txCnt; acctRecieve = SELECT tgt FROM Seed:s -(reverse_Recieve_Transaction:e)-> Transaction:tgt ACCUM s.@r_sumAmt += tgt.amount, s.@r_txCnt += 1, s.@r_minAmt += tgt.amount, s.@r_maxAmt += tgt.amount, s.@r_avgAmt += tgt.amount POST-ACCUM s.current_balance = s.@r_sumAmt + s.init_balance, s.min_recieve_tx = s.@r_minAmt, s.max_recieve_tx = s.@r_maxAmt, s.avg_recieve_tx = s.@r_avgAmt, s.cnt_recieve_tx = s.@r_txCnt; PRINT "Features Have Been Calculated"; }; INSTALL QUERY accountActivity """, options=[]))
如果上述修改仍报错,可将创建查询和安装查询拆分为两次独立调用,避免单次传入的多行内容过长导致解析错误:
# 第一步:创建查询 create_query_sql = r""" CREATE QUERY accountActivity() FOR GRAPH AMLSim { SumAccum<DOUBLE> @s_sumAmt, @r_sumAmt; SumAccum<DOUBLE> @s_txCnt, @r_txCnt; MinAccum<DOUBLE> @s_minAmt, @r_minAmt; MaxAccum<DOUBLE> @s_maxAmt, @r_maxAmt; AvgAccum @s_avgAmt, @r_avgAmt; Seed = {Account.*}; acctSend = SELECT tgt FROM Seed:s -(Send_Transaction:e)-> Transaction:tgt ACCUM s.@s_sumAmt += tgt.amount, s.@s_txCnt += 1, s.@s_minAmt += tgt.amount, s.@s_maxAmt += tgt.amount, s.@s_avgAmt += tgt.amount POST-ACCUM s.current_balance = s.@s_sumAmt - s.init_balance, s.min_send_tx = s.@s_minAmt, s.max_send_tx = s.@s_maxAmt, s.avg_send_tx = s.@s_avgAmt, s.cnt_send_tx = s.@s_txCnt; acctRecieve = SELECT tgt FROM Seed:s -(reverse_Recieve_Transaction:e)-> Transaction:tgt ACCUM s.@r_sumAmt += tgt.amount, s.@r_txCnt += 1, s.@r_minAmt += tgt.amount, s.@r_maxAmt += tgt.amount, s.@r_avgAmt += tgt.amount POST-ACCUM s.current_balance = s.@r_sumAmt + s.init_balance, s.min_recieve_tx = s.@r_minAmt, s.max_recieve_tx = s.@r_maxAmt, s.avg_recieve_tx = s.@r_avgAmt, s.cnt_recieve_tx = s.@r_txCnt; PRINT "Features Have Been Calculated"; }; """ print(conn.gsql(create_query_sql, options=[])) # 第二步:安装查询 install_query_sql = "INSTALL QUERY accountActivity" print(conn.gsql(install_query_sql, options=[]))
如果运行仍有异常,先确认conn连接的目标图谱确实为AMLSim,且当前账号拥有查询创建、安装权限即可。
内容的提问来源于stack exchange,提问作者user16772647
相关产品推荐
相关产品推荐

