python - Gremlin Python 返回空图

标签 python gremlin tinkerpop gremlin-server janusgraph

我已经开始尝试使用 gremlin-python 包装器与我的 gremlin 服务器进行交互。

我做了以下步骤:

./bin/gremlin.sh

Gremlin 控制台打开后,我使用以下方法加载配置:

graph = JanusGraphFactory.open('conf/gremlin-server/janusgraph-cassandra-es.properties')
g = graph.traversal()
saturn = g.V().has('name', 'saturn')

上面的一组代码在 gremlin shell 中工作正常,我可以看到列出的顶点,但是当我尝试在 python 中做同样的事情时,我得到一个空图。以下是我的 python 代码:

graph = Graph()
g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
print(g)

它返回: graphtraversalsource[graph[empty]]

为什么我得到空图?据我所知,它无法连接到相同的图形源。有什么我想念的吗?

请注意:

JanusGraphFactory.open('conf/gremlin-server/janusgraph-cassandra-es.properties')

提供的配置文件名用于启动 gremlin 服务器。

非常感谢任何帮助。

谢谢

最佳答案

您看到 graph[empty] 的原因是因为这是 Python 图形对象的实际字符串表示形式——参见 code here .尽管该图可能实际上包含数据,所以如果它是类似 graph[remote]graph[] 的东西会更好。我打开了一个 issue来解决这个问题。

开箱即用,JanusGraph 未针对 Python 配置。您可以在 Apache TinkerPop docs 中找到有关如何执行此操作的文档。 .首先安装 gremlin-python。这是假设您使用的是使用 TinkerPop 3.2.3 的 JanusGraph 0.1.1 的命令:

bin/gremlin-server.sh -i org.apache.tinkerpop gremlin-python 3.2.3

接下来修改conf/gremlin-server/gremlin-server.yaml添加gremlin-python脚本引擎:

scriptEngines: {
  gremlin-groovy: {
    imports: [java.lang.Math],
    staticImports: [java.lang.Math.PI],
    scripts: [scripts/empty-sample.groovy]},
  gremlin-jython: {},
  gremlin-python: {}
}

要使用 Gremlin Python,您需要通过 Gremlin Server,因此启动 JanusGraph pre-packaged distribution :

bin/janusgraph.sh start

从 Gremlin 控制台:

gremlin> graph = JanusGraphFactory.open('conf/janusgraph-cassandra-es.properties')
==>standardjanusgraph[cassandrathrift:[127.0.0.1]]
gremlin> GraphOfTheGodsFactory.load(graph)
==>null
gremlin> g = graph.traversal()
==>graphtraversalsource[standardjanusgraph[cassandrathrift:[127.0.0.1]], standard]
gremlin> g.V().count()
14:51:58 WARN  org.janusgraph.graphdb.transaction.StandardJanusGraphTx  - Query requires iterating over all vertices [()]. For better performance, use indexes
==>12

安装 Gremlin-Python 驱动程序,再次匹配 TinkerPop 版本:

pip install gremlinpython==3.2.3

来自 Python 3 shell:

>>> from gremlin_python import statics
>>> from gremlin_python.structure.graph import Graph
>>> from gremlin_python.process.graph_traversal import __
>>> from gremlin_python.process.strategies import *
>>> from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
>>> graph = Graph()
>>> g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
>>> print(graph)
graph[empty]
>>> print(g)
graphtraversalsource[graph[empty]]
>>> g.V().count().next()
12
>>> g.addV('god').property('name', 'mars').property('age', 3500).next()
v[4280]
>>> g.V().count().next()
13

请记住,当您在 Python shell 中工作时,图遍历不会自动迭代,因此您需要确保使用 iterate()next( )toList()

关于python - Gremlin Python 返回空图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46070265/

相关文章:

python - 无法使用 Ubuntu 导入 python-numpy

python - scikit-learn 中对象没有属性,如何访问它?

python - R 中的 combn 函数等效于 Python(生成 n 个元素的所有组合)

gremlin - tinkerpop/gremlin-python : next() vs iterate()

gremlin - 通过 Gremlin 查询从节点返回属性子集

gremlin - 如何使用 Gremlin 沿路径收集所有顶点和边属性

gremlin - 更改 gremlin 服务器中的默认序列化以使用 GraphS ON V1

python - 如何在服务器上接收电子邮件?最好使用 Python 或 Perl

javascript - Gremlin,javascript : where is the function "valueMap()" imported from?

TinkerPop:添加顶点图 API 与遍历 API