正确处理 AWS Neptune Gremlin 中的顶点删除 Python
Proper handling of vertex deletion in AWS Neptune Gremlin Python
使用 gremlin_python 删除 AWS Neptune 中的顶点会引发错误,即使该顶点 实际已删除 (我稍后查询时找不到它)。
我的顶点删除查询有误吗?
delete_vertex_q = "g.V(%s).drop().next()"%(v_id)
delete_vertex_r = eval(delete_vertex_q)
在那之后,当我再次尝试找到顶点时:
print(g.V('<vertex_id>').next())
我收到 StopIteration
错误。
我应该如何正确处理 AWS Neptune Gremlin 中的顶点删除和检查?
您需要将遍历视为一个流,当该流为空并且您尝试获取下一个时,将会发生错误。如果您要向 Neptune 发送脚本,那么 g.V(id).hasNext()
是将为您提供布尔结果的语法。如果您正在使用 gremlin-python 并使用原生 Python 编写 Gremlin,那么您将需要执行以下操作:
len(g.V(id).toList()) == 0
或者也许:
g.V(id).count().next() == 0
请注意,使用(即将发布的)gremlin-python 3.2.10/3.3.4,您可以直接在 Python 中执行 hasNext()
并且上面的选项可以被忽略。
使用 gremlin_python 删除 AWS Neptune 中的顶点会引发错误,即使该顶点 实际已删除 (我稍后查询时找不到它)。
我的顶点删除查询有误吗?
delete_vertex_q = "g.V(%s).drop().next()"%(v_id)
delete_vertex_r = eval(delete_vertex_q)
在那之后,当我再次尝试找到顶点时:
print(g.V('<vertex_id>').next())
我收到 StopIteration
错误。
我应该如何正确处理 AWS Neptune Gremlin 中的顶点删除和检查?
您需要将遍历视为一个流,当该流为空并且您尝试获取下一个时,将会发生错误。如果您要向 Neptune 发送脚本,那么 g.V(id).hasNext()
是将为您提供布尔结果的语法。如果您正在使用 gremlin-python 并使用原生 Python 编写 Gremlin,那么您将需要执行以下操作:
len(g.V(id).toList()) == 0
或者也许:
g.V(id).count().next() == 0
请注意,使用(即将发布的)gremlin-python 3.2.10/3.3.4,您可以直接在 Python 中执行 hasNext()
并且上面的选项可以被忽略。