如何在Python Gremlin变体中添加边缘

6
我正在尝试使用gremlin-python创建一个图,但似乎无法弄清如何添加一条边。
在使用标准的Gremlin控制台时,我可以执行以下操作:
gremlin> a = g.addV().next()
==>v[0]
gremlin> b = g.addV().next()
==>v[1]
gremlin> g.V()
==>v[0]
==>v[1]
gremlin> a.addEdge('conn', b)
==>e[2][0-conn->1]
gremlin> g.E()
==>e[2][0-conn->1]
gremlin> 

但是,当尝试通过连接到Gremlin服务器的Python完成相同操作时,似乎无法做到这一点:
>>> a = g.addV().next()
>>> b = g.addV().next()
>>> g.V().toList()
[v[1519], v[1520]]
>>> a.addEdge('conn', b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Vertex' object has no attribute 'addEdge'

我尝试了各种咒语,但似乎无法解决问题,也找不到任何示例。此外,在Gremlin文档中我看到了对addEaddEdge的引用,但无法确定它们之间的区别(上述两者都似乎无法工作)。
编辑:进展有点,但仍然没有运气。看起来GraphTraversal.addE()存在,因此如果我不调用next(),那么我可以调用addE...但是我似乎仍然无法使其接受参数。
>>> a = g.addV()
>>> b = g.addV()
>>> a.addE('foo', b).toList()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Development/matt/lib/python2.7/site-packages/gremlin_python/process/traversal.py", line 52, in toList
    return list(iter(self))
  File "/Development/matt/lib/python2.7/site-packages/gremlin_python/process/traversal.py", line 70, in next
    return self.__next__()
  File "/Development/matt/lib/python2.7/site-packages/gremlin_python/process/traversal.py", line 43, in __next__
    self.traversal_strategies.apply_strategies(self)
  File "/Development/matt/lib/python2.7/site-packages/gremlin_python/process/traversal.py", line 284, in apply_strategies
    traversal_strategy.apply(traversal)
  File "/Development/matt/lib/python2.7/site-packages/gremlin_python/driver/remote_connection.py", line 95, in apply
    remote_traversal = self.remote_connection.submit(traversal.bytecode)
  File "/Development/matt/lib/python2.7/site-packages/gremlin_python/driver/driver_remote_connection.py", line 53, in submit
    traversers = self._loop.run_sync(lambda: self.submit_traversal_bytecode(request_id, bytecode))
  File "/Development/matt/lib/python2.7/site-packages/tornado/ioloop.py", line 457, in run_sync
    return future_cell[0].result()
  File "/Development/matt/lib/python2.7/site-packages/tornado/concurrent.py", line 237, in result
    raise_exc_info(self._exc_info)
  File "/Development/matt/lib/python2.7/site-packages/tornado/gen.py", line 1021, in run
    yielded = self.gen.throw(*exc_info)
  File "/Development/matt/lib/python2.7/site-packages/gremlin_python/driver/driver_remote_connection.py", line 73, in submit_traversal_bytecode
    traversers = yield self._execute_message(message)
  File "/Development/matt/lib/python2.7/site-packages/tornado/gen.py", line 1015, in run
    value = future.result()
  File "/Development/matt/lib/python2.7/site-packages/tornado/concurrent.py", line 237, in result
    raise_exc_info(self._exc_info)
  File "/Development/matt/lib/python2.7/site-packages/tornado/gen.py", line 1021, in run
    yielded = self.gen.throw(*exc_info)
  File "/Development/matt/lib/python2.7/site-packages/gremlin_python/driver/driver_remote_connection.py", line 149, in _execute_message
    recv_message = yield response.receive()
  File "/Development/matt/lib/python2.7/site-packages/tornado/gen.py", line 1015, in run
    value = future.result()
  File "/Development/matt/lib/python2.7/site-packages/tornado/concurrent.py", line 237, in result
    raise_exc_info(self._exc_info)
  File "/Development/matt/lib/python2.7/site-packages/tornado/gen.py", line 1024, in run
    yielded = self.gen.send(value)
  File "/Development/matt/lib/python2.7/site-packages/gremlin_python/driver/driver_remote_connection.py", line 236, in receive
    "{0}: {1}".format(status_code, recv_message["status"]["message"]))
gremlin_python.driver.driver_remote_connection.GremlinServerError: 599: Could not locate method: DefaultGraphTraversal.addE([foo, [AddVertexStep({})]])
2个回答

5
据我所知,addEdge()是在图形对象上运行的,而addE()则是在图形遍历对象上运行的。由于您正在使用后者g(),因此您需要使用addE()

2

似乎以下语法可行:

>>> a = g.addV()
>>> b = g.addV()
>>> a.addE('foo').to(b).toList()
[e[1534][1532-foo->1533]]

我仍然不清楚addEaddEdge之间的区别,但我猜后者在Python中不可用,我混淆了它们的签名。


6
无法运行,报错:“vertex没有名为addE的属性”。 - Arvind
1
a是一个“顶点”,但你需要从代表一个顶点的遍历步骤调用.addE(): g.V(a).addE('foo').to(b).toList() - Leland Reardon
g.addE('foo').from_(a).to(b).next() 对我很有效。 - Gmosy Gnaq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接