2016-12-09 12 views
1

Я пытаюсь создать граф с использованием gremlin-python, но я не могу понять, как добавить ребро.Как добавить ребро в варианте Python Gremlin

Используя стандартную консоль 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> 

Но при попытке сделать то же самое с помощью питона, подключенного к серверу гремлина, я не могу сделать то же самое:

>>> 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 как на addE, так и на addEdge, но не может понять, в чем разница (как, кажется, не работает выше).

Редактировать: Получите немного больше, но все равно не повезло. Кажется, 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({})]]) 

ответ

0

Кажется следующий синтаксис работает:

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

Я до сих пор не ясно, о разнице между addE и addEdge, но я предполагаю, что последний не доступен в Python, и я путает подпись их.

+1

Это не работает и выдает ошибку. 'Vertex не имеет атрибута, называемого addE'. – Arvind

1

Насколько я знаю, addEdge() работает над объектом графа, а addE() работает над объектом обхода графика. Поскольку вы использовали g(), который является последним, вам нужно addE().