Bulbflow:neo4jserver Graph和neo4jserver Neo4jclient之间的区别

npo*_*ina 6 python neo4j cypher bulbs tinkerpop

我现在正在尝试学习如何使用Python中的Bulbflow连接到Neo4j服务器并在其上运行Cypher查询.我不明白的是连接到neo4j服务器的两种可能性之间的区别:

1)图表

from bulbs.neo4jserver import Graph
g = Graph()
Run Code Online (Sandbox Code Playgroud)

2)Neo4jClient

from bulbs.neo4jserver import Neo4jClient
client = Neo4jClient()
Run Code Online (Sandbox Code Playgroud)

有谁能请解释这里的概念差异?哪种方式更好的选择我是否想要执行(相当多)Cypher查询服务器并最终并行执行?

PS:我没有足够的声誉为这个问题创建一个标签"bulbflow":)

esp*_*eed 13

Bulbs支持三种不同的图形数据库服务器 - Neo4j Server,RexsterTitan.

特定于每个后端服务器的代码包含在其自己的Python包(目录)中.您应该看到以下目录:neo4jserver,rexster,titan:

Neo4jClient 是Neo4j服务器的低级适配器 - 除非你做自定义工作,否则通常不需要直接使用它 - 使用高级Graph类.

请参阅灯泡文档...

灯泡快速入门指南提供了有关使用Graph界面的示例:

但是,当您需要通过_clientvar 时,Bulbs对象始终可以访问低级客户端.

Lightbulb是我创建的示例应用程序,用于演示如何使用和自定义Bulbs模型 - 它是一个Python博客引擎,它使用Git进行源代码控制,使用图形数据库进行持久化.

灯泡最初设计用于免费的Neo4j Heroku Add On,但灯泡和灯泡都大量使用Gremlin,Neo4j Heroko Add On不再提供免费版的Gremlin.

Lightbulb模型文件包含大量定制的Entry模型和自定义Graph类 - 该Entry模型使用低级客户端:

正如您在Entry模型中看到的,我可以通过_clientvar 访问低级客户端,并使用它从scripts库中获取Gremlin脚本,然后再次执行Gremlin脚本.

这是save_blog_entryEntry模型使用的Gremlin脚本的代码:

注意:文件中只有一个Gremlin脚本,但它很大,包含多个操作,并且所有内容都包含在事务中.将所有操作放入单个Gremlin脚本允许您在一个事务请求中执行所有操作,而不是将多个请求发送到服务器.

除非您正在执行自定义模型之类的操作,否则通常会使用scripts对象和gremlin存储在graph对象上的对象:

>>> from bulbs.neo4jserver import Graph
>>> g = Graph() 
>>> script = g.scripts.get('some_script')
>>> params = dict(name="James", city="Dallas")
>>> g.gremlin.execute(script, params)
Run Code Online (Sandbox Code Playgroud)

查看Bulbs Neo4j Gremlin文档...

同样,当您要执行Neo4j Cypher查询时,请使用cypher存储在graph对象上的对象.

有三种Cypher方法(遗憾的是,这些方法尚未在网站上记录):

  1. g.cypher.query():在返回节点/关系列表时使用 - 它会将它们初始化为对象.
  2. g.cypher.table():返回Cypher表数据时使用.
  3. g.cypher.exectue():在返回任意数据时使用 - 它返回一个通用Response对象.

您可以查看源代码以了解它们的工作原理......

以下是使用Cypher query()方法的一些示例(查询只返回一个关系):

>>> from bulbs.neo4jserver import Graph
>>> g = Graph() 
>>> query = "start a = relationship({eid}) return a"
>>> params = dict(eid=123) 
>>> edges = g.cypher.query(query, params)
Run Code Online (Sandbox Code Playgroud)

查询方法自动将元素初始化为其类型.如果您将元素创建为自定义模型,Bulbs将尝试将其初始化为特定类型,否则它将默认为泛型VertexEdge.

请注意,Bulbs Cypher query()方法返回一个迭代器.

你可以遍历迭代器......

>>> from bulbs.neo4jserver import Graph
>>> g = Graph() 
>>> query = "start a = relationship({eid}) return a"
>>> params = dict(eid=123) 
>>> edges = g.cypher.query(query, params)
>>> for edge in edges: print edge
Run Code Online (Sandbox Code Playgroud)

...或将其转换为列表......

>>> from bulbs.neo4jserver import Graph
>>> g = Graph() 
>>> query = "start a = relationship({eid}) return a"
>>> params = dict(eid=123) 
>>> edges = g.cypher.query(query, params)
>>> list(edges)
Run Code Online (Sandbox Code Playgroud)

......或者获得下一个项目......

>>> from bulbs.neo4jserver import Graph
>>> g = Graph() 
>>> query = "start a = relationship({eid}) return a"
>>> params = dict(eid=123) 
>>> edges = g.cypher.query(query, params)
>>> edges.next()
Run Code Online (Sandbox Code Playgroud)

如果您有任何疑问,请与我们联系.