gremlin-python - невозможно добавить свойство ребра - PullRequest
0 голосов
/ 19 июня 2019

У меня большие проблемы с добавлением свойств к ребру с помощью оболочки gremlin_python.

Я могу создать ребро, вот так:

eid1='123'
eid2='456'
edge = g.V().has('eid', eid1).addE('transaction').to(g.V().has('entity_id',eid2)).next()

Но добавление свойств к краю не работает. Как в: код выполняется без ошибок, но на самом ребре не происходит никаких изменений, поэтому, когда я после вызова g.E(edge).valueMap.toList() возвращает пустой список.

g.E(edge).property('foo','bar').iterate()    <-- I've also tried this without iterate.

Это также не работает, если я создаю узел и добавляю свойство в той же строке кода.

Тот же код, но исполняемый в консоли gremlin, работает как положено. после создания ребра и присвоения свойства:

gremlin> g.E(edge).valueMap().toList()
==>{foo=bar}

Любая помощь здесь будет принята с благодарностью.


Обновление

Мне не удалось заставить это работать, используя оболочку python для объекта обхода графа, вместо этого я пропустил код через клиент, который работает, как и ожидалось. Но это обходной путь, а не решение.

gremlin_client = client.Client('ws://localhost:8182/gremlin', 'g')

query = "g.V().has('eid', '123').addE('transaction').to(g.V().has('eid','456')).property('foo','bar').next()"
gremlin_client.submit(query).all().result()

1 Ответ

0 голосов
/ 20 июня 2019

Я протестировал ваш сценарий на 3.4.3-SNAPSHOT и не вижу проблемы:

>>> g.addV().property('entity_id','123').iterate()
[['addV'], ['property', 'entity_id', '123'], ['none']]
>>> g.addV().property('entity_id','456').iterate()
[['addV'], ['property', 'entity_id', '456'], ['none']]
>>> e = g.V().has('entity_id','123').addE('transaction').to(__.V().has('entity_id','456')).next()
>>> g.E(e).property('foo','bar').iterate()
[['E', e[4][0-transaction->2]], ['property', 'foo', 'bar'], ['none']]
>>> g.E(e).valueMap().toList()
[{u'foo': u'bar'}]

Я отмечаю, что в вашем примере кода есть синтаксическая ошибка - глядя на:

eid1='123'
eid2='456'
edge = g.V().has('eid', eid1).addE('transaction').to(g.V().has('entity_id',eid2)).next()

В частности, вы смешиваете «eid» и «entity_id» в качестве идентификаторов вершины.Предполагая, что «eid» неверен, и это должен быть «entity_id», я мог видеть, как этот обход завершится неудачей без обновления (так как начальная вершина никогда не будет найдена), а затем оставит вас в положении, когда вы не можете обновить ребро, потому что оно былоникогда не создавался.

...