Gremlin Python返回空图

2024-10-01 17:35:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经开始使用gremlin python包装器与gremlin服务器交互。在

我完成了以下步骤:

./bin/gremlin.sh

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

^{pr2}$

上面的一组代码在gremlinshell中运行得很好,我可以看到下面列出的顶点,但是当我在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服务器。在

任何帮助都是非常感谢的。在

谢谢


Tags: 代码命令服务器图形binsh步骤graph
2条回答

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

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

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

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

^{pr2}$

要使用Gremlin Python,需要遍历Gremlin服务器,因此启动JanusGraphpre-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

请记住,当您在pythonshell中工作时,图遍历不会自动迭代,因此您需要确保使用iterate()next()或{}来迭代遍历。

Gremlin控制台中的本地“g”是一个嵌入的图形实例。因此它“包含”一些东西,而不是空的。对于Python中的“g”,它是“空的”,因为它本身没有顶点/边,这些顶点/边在Gremlin服务器上的远程图形中,它反映了这些顶点/边。我假设,如果您在python中执行g.V().count(),那么您将获得与java中相同的顶点计数。如果不是,那么还有其他一些问题,但是不要期望“远程”图形实例显示任何类型的顶点/边(除非有一天,gremlin python被编写成一个gremlin虚拟机,它有它自己的python本机图形数据库,在这种情况下,“g”将被嵌入,因此拥有顶点/边,可能不再打印为“空”。

相关问题 更多 >

    热门问题