Gremlin-python中如何在已存在的顶点之间添加边?
gremlin-python两个已有顶点间添加边的标准实现
现有代码错误原因
- 代码片段1错误:
addE()是Gremlin遍历器的专属方法,你通过next()拿到的是本地Vertex实体对象,该对象没有addE属性,因此触发AttributeError。 - 代码片段2错误:Gremlin遍历是流式上下文传递逻辑,连续调用
V()方法会重置遍历上下文,你给v2打完as_('t')标记后又调用了V(v1),之前的标记上下文已经被清空,to("t")找不到对应标记就会抛出KeyError。
标准正确写法
写法1:已提前查询到顶点实例的场景
如果已经把两个顶点查询到本地了,直接把顶点对象传入遍历方法即可:
# 查询获取两个顶点的本地实例 v1 = g.V().has("Customers", "OrderedId", 1).next() v2 = g.V().has("Hotels", "Id", 1).next() # 从遍历器启动加边逻辑,to()中直接传入顶点实例 new_edge = g.V(v1).addE("HasVisited").to(v2).next()
写法2:无需拉取顶点到本地的性能优化写法
全程在图数据库服务端执行,不需要把顶点数据拉到本地,减少网络往返开销:
new_edge = g.V().has("Customers", "OrderedId", 1).as_("v1") \ .V().has("Hotels", "Id", 1) \ .addE("HasVisited").from_("v1") \ .next()
补充说明
- 单条边添加操作只会返回一个边结果,用
next()即可拿到边实例,不需要调用toList()。 - 如果需要给边添加自定义属性,链式调用
property()方法即可,示例如下:
new_edge = g.V(v1).addE("HasVisited").to(v2) \ .property("visit_date", "2024-06-15") \ .property("stay_days", 2) \ .next()
内容的提问来源于stack exchange,提问作者Sagar
相关产品推荐
相关产品推荐

