Gremlin Python 项目按条款
Gremlin Python project By clause
在 Datastax Enterprise Graph(5.1 版本)上有一个图 运行ning,在 Cassandra 存储上 运行ning。
尝试 运行 查询以获取 ID 和 属性。
在 Gremlin 控制台中,我可以这样做:
gremlin> g.V(1).project("v", "properties").by().by(valueMap())
==>[v:v[1],properties:[name:[marko],age:[29]]]
如何仍然使用 Python GraphTraversal API 翻译 valueMap 调用。我知道我可以 运行 通过会话执行直接查询,就像这样。
session.execute_graph("g.V().has(\"Node_Name\",\"A\").project(\"v\", \"properties\").by().by(valueMap())",{"name":graph_name})
下面是我的设置代码。
from dse.cluster import Cluster, EXEC_PROFILE_GRAPH_DEFAULT
from dse_graph import DseGraph
from dse.cluster import GraphExecutionProfile, EXEC_PROFILE_GRAPH_SYSTEM_DEFAULT
from dse.graph import GraphOptions
from gremlin_python.process.traversal import T
from gremlin_python.process.traversal import Order
from gremlin_python.process.traversal import Cardinality
from gremlin_python.process.traversal import Column
from gremlin_python.process.traversal import Direction
from gremlin_python.process.traversal import Operator
from gremlin_python.process.traversal import P
from gremlin_python.process.traversal import Pop
from gremlin_python.process.traversal import Scope
from gremlin_python.process.traversal import Barrier
graph_name = "TEST"
graph_ip = ["127.0.0.1"]
graph_port = 9042
schema = """
schema.edgeLabel("Group").create();
schema.propertyKey("Version").Text().create();
schema.edgeLabel("Group").properties("Version").add()
schema.vertexLabel("Example").create();
schema.edgeLabel("Group").connection("Example", "Example").add()
schema.propertyKey("Node_Name").Text().create();
schema.vertexLabel("Example").properties("Node_Name").add()
schema.vertexLabel("Example").index("exampleByName").secondary().by("Node_Name").add();
"""
profile = GraphExecutionProfile(
graph_options=GraphOptions(graph_name=graph_name))
client = Cluster(
contact_points=graph_ip, port=graph_port,
execution_profiles={EXEC_PROFILE_GRAPH_DEFAULT: profile}
)
graph_name = graph_name
session = client.connect()
graph = DseGraph.traversal_source(session)
# force the schema to be clean
session.execute_graph(
"system.graph(name).ifExists().drop();",
{'name': graph_name},
execution_profile=EXEC_PROFILE_GRAPH_SYSTEM_DEFAULT
)
session.execute_graph(
"system.graph(name).ifNotExists().create();",
{'name': graph_name},
execution_profile=EXEC_PROFILE_GRAPH_SYSTEM_DEFAULT
)
session.execute_graph(schema)
session.shutdown()
session = client.connect()
graph = DseGraph.traversal_source(session)
更新:
我想我没有把问题说清楚。它在 python 而不是在 gremlin 控制台中。所以 运行ning 代码像 graph.V().has("Node_Name","A").project("v","properties").by().by(valueMap()).toList()
将给出以下结果。如何在仍然保持在 GLV 级别的同时执行 gremlin 查询,而不是下拉到 Gremlin-Server 的文本序列化查询?
Traceback (most recent call last):
File "graph_test.py", line 79, in <module>
graph.V().has("Node_Name","A").project("v", "properties").by().by(valueMap()).toList()
NameError: name 'valueMap' is not defined
我可能不完全理解你的问题,但看起来你基本上已经有了答案。最后一行代码:
graph = DseGraph.traversal_source(session)
大概应该写成:
g = DseGraph.traversal_source(session)
traversal_source(session)
的 return 值是一个 TraversalSource
而不是 Graph
实例,按照惯例 TinkerPop 倾向于将这样的变量称为 g
.一旦你有了 TraversalSource
,你就可以编写你的 Gremlin 了。
g = DseGraph.traversal_source(session)
g.V().has("Node_Name","A").project("v", "properties").by().by(valueMap()).toList()
在 Datastax Enterprise Graph(5.1 版本)上有一个图 运行ning,在 Cassandra 存储上 运行ning。 尝试 运行 查询以获取 ID 和 属性。 在 Gremlin 控制台中,我可以这样做:
gremlin> g.V(1).project("v", "properties").by().by(valueMap())
==>[v:v[1],properties:[name:[marko],age:[29]]]
如何仍然使用 Python GraphTraversal API 翻译 valueMap 调用。我知道我可以 运行 通过会话执行直接查询,就像这样。
session.execute_graph("g.V().has(\"Node_Name\",\"A\").project(\"v\", \"properties\").by().by(valueMap())",{"name":graph_name})
下面是我的设置代码。
from dse.cluster import Cluster, EXEC_PROFILE_GRAPH_DEFAULT
from dse_graph import DseGraph
from dse.cluster import GraphExecutionProfile, EXEC_PROFILE_GRAPH_SYSTEM_DEFAULT
from dse.graph import GraphOptions
from gremlin_python.process.traversal import T
from gremlin_python.process.traversal import Order
from gremlin_python.process.traversal import Cardinality
from gremlin_python.process.traversal import Column
from gremlin_python.process.traversal import Direction
from gremlin_python.process.traversal import Operator
from gremlin_python.process.traversal import P
from gremlin_python.process.traversal import Pop
from gremlin_python.process.traversal import Scope
from gremlin_python.process.traversal import Barrier
graph_name = "TEST"
graph_ip = ["127.0.0.1"]
graph_port = 9042
schema = """
schema.edgeLabel("Group").create();
schema.propertyKey("Version").Text().create();
schema.edgeLabel("Group").properties("Version").add()
schema.vertexLabel("Example").create();
schema.edgeLabel("Group").connection("Example", "Example").add()
schema.propertyKey("Node_Name").Text().create();
schema.vertexLabel("Example").properties("Node_Name").add()
schema.vertexLabel("Example").index("exampleByName").secondary().by("Node_Name").add();
"""
profile = GraphExecutionProfile(
graph_options=GraphOptions(graph_name=graph_name))
client = Cluster(
contact_points=graph_ip, port=graph_port,
execution_profiles={EXEC_PROFILE_GRAPH_DEFAULT: profile}
)
graph_name = graph_name
session = client.connect()
graph = DseGraph.traversal_source(session)
# force the schema to be clean
session.execute_graph(
"system.graph(name).ifExists().drop();",
{'name': graph_name},
execution_profile=EXEC_PROFILE_GRAPH_SYSTEM_DEFAULT
)
session.execute_graph(
"system.graph(name).ifNotExists().create();",
{'name': graph_name},
execution_profile=EXEC_PROFILE_GRAPH_SYSTEM_DEFAULT
)
session.execute_graph(schema)
session.shutdown()
session = client.connect()
graph = DseGraph.traversal_source(session)
更新:
我想我没有把问题说清楚。它在 python 而不是在 gremlin 控制台中。所以 运行ning 代码像 graph.V().has("Node_Name","A").project("v","properties").by().by(valueMap()).toList()
将给出以下结果。如何在仍然保持在 GLV 级别的同时执行 gremlin 查询,而不是下拉到 Gremlin-Server 的文本序列化查询?
Traceback (most recent call last):
File "graph_test.py", line 79, in <module>
graph.V().has("Node_Name","A").project("v", "properties").by().by(valueMap()).toList()
NameError: name 'valueMap' is not defined
我可能不完全理解你的问题,但看起来你基本上已经有了答案。最后一行代码:
graph = DseGraph.traversal_source(session)
大概应该写成:
g = DseGraph.traversal_source(session)
traversal_source(session)
的 return 值是一个 TraversalSource
而不是 Graph
实例,按照惯例 TinkerPop 倾向于将这样的变量称为 g
.一旦你有了 TraversalSource
,你就可以编写你的 Gremlin 了。
g = DseGraph.traversal_source(session)
g.V().has("Node_Name","A").project("v", "properties").by().by(valueMap()).toList()