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)
from bulbs.neo4jserver import Neo4jClient
client = Neo4jClient()
Run Code Online (Sandbox Code Playgroud)
有谁能请解释这里的概念差异?哪种方式更好的选择我是否想要执行(相当多)Cypher查询服务器并最终并行执行?
PS:我没有足够的声誉为这个问题创建一个标签"bulbflow":)
esp*_*eed 13
Bulbs支持三种不同的图形数据库服务器 - Neo4j Server,Rexster和Titan.
特定于每个后端服务器的代码包含在其自己的Python包(目录)中.您应该看到以下目录:neo4jserver,rexster,titan:
Neo4jClient
是Neo4j服务器的低级适配器 - 除非你做自定义工作,否则通常不需要直接使用它 - 使用高级Graph类.
请参阅灯泡文档...
灯泡快速入门指南提供了有关使用Graph
界面的示例:
但是,当您需要通过_client
var 时,Bulbs对象始终可以访问低级客户端.
Lightbulb是我创建的示例应用程序,用于演示如何使用和自定义Bulbs模型 - 它是一个Python博客引擎,它使用Git进行源代码控制,使用图形数据库进行持久化.
灯泡最初设计用于免费的Neo4j Heroku Add On,但灯泡和灯泡都大量使用Gremlin,Neo4j Heroko Add On不再提供免费版的Gremlin.
Lightbulb模型文件包含大量定制的Entry
模型和自定义Graph
类 - 该Entry
模型使用低级客户端:
正如您在Entry
模型中看到的,我可以通过_client
var 访问低级客户端,并使用它从scripts
库中获取Gremlin脚本,然后再次执行Gremlin脚本.
这是save_blog_entry
Entry模型使用的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方法(遗憾的是,这些方法尚未在网站上记录):
g.cypher.query()
:在返回节点/关系列表时使用 - 它会将它们初始化为对象.g.cypher.table()
:返回Cypher表数据时使用.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将尝试将其初始化为特定类型,否则它将默认为泛型Vertex
或Edge
.
请注意,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)
如果您有任何疑问,请与我们联系.