Bulbs支持三種不同的圖形數據庫服務器 - Neo4j Server,Rexster,現在Titan。
特定於每個後端服務器的代碼包含在其自己的Python包(目錄)中。你應該看到的目錄爲:neo4jserver,rexster,鈦:
Neo4jClient
是Neo4j的服務器的低級別的適配器 - 你通常不需要使用此直接除非你正在做自定義的東西 - 而是使用高級的Graph類。
見燈泡文檔的...
燈泡快速入門指南提供了有關使用Graph
接口的例子:
但是,當您需要通過_client
變種,您的燈泡對象始終可以訪問低級客戶端。
Lightbulb是我創建的示例應用程序,用於展示如何使用和定製燈泡模型 - 它是一個Python博客引擎,它使用Git進行源代碼控制,並使用圖形數據庫進行持久化。
燈泡最初設計用於與自由Neo4j Heroku Add On使用,但兩者燈泡和燈泡使Gremlin大量使用,以及Neo4j的Heroko添加論自由不再提供精怪版。
燈泡模型文件包含一個高度定製Entry
模型和一個自定義Graph
類 - 的Entry
模型採用了低級別的客戶端的:
由於您可以在Entry
模型中看到,我可以通過_client
var訪問低級客戶端,並使用它從scripts
庫中獲取Gremlin腳本,然後再次執行Gremlin腳本。
下面是由輸入模型中使用的save_blog_entry
小鬼腳本代碼:
注意:只有在文件中一個小鬼腳本,但它很大,包含 幾個操作,並且一切都被包裝在一個事務中。 將所有操作放入單個Gremlin腳本允許您在一個事務性請求中執行所有操作,而不是將多個請求發送到服務器的開銷爲 。
除非你正在做的事情就像定製的模型,你通常會使用scripts
對象並存儲在對象的gremlin
對象:
>>> from bulbs.neo4jserver import Graph
>>> g = Graph()
>>> script = g.scripts.get('some_script')
>>> params = dict(name="James", city="Dallas")
>>> g.gremlin.execute(script, params)
看到燈泡的Neo4j小鬼文檔...
同樣,當您要執行Neo4j Cypher查詢時,請使用存儲在對象上的cypher
對象。
有三種暗號方法(不幸的是,這些都沒有記錄在網站上還):
g.cypher.query()
:返回節點/關係列表時使用 - 將他們初始化的對象。
g.cypher.table()
:返回Cypher表數據時使用。
g.cypher.exectue()
:返回任意數據時使用 - 它返回一個通用的Response
對象。
你可以看看源代碼,看看它們是如何工作的...
下面是使用的Cypher查詢()方法(該查詢簡單地返回一個關係)的一些例子:
>>> from bulbs.neo4jserver import Graph
>>> g = Graph()
>>> query = "start a = relationship({eid}) return a"
>>> params = dict(eid=123)
>>> edges = g.cypher.query(query, params)
查詢方法自動初始化元件到他們的類型。如果您將該元素創建爲自定義模型,則燈泡會嘗試將其初始化爲特定類型,否則將默認爲通用的Vertex
或Edge
。
請注意,燈泡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
...或將其轉換爲一個列表...
>>> 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)
...或獲取下一個項目...
>>> 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()
如果您有任何疑問,請讓我知道。
非常詳細的答案感謝例子。 – npobedina
密碼查詢選項真的難倒我,直到我遇到這個。在文檔中找到.query(),.table()和.execute()會很有幫助!否則我是一個燈泡的粉絲 - 謝謝! – zanbri
模塊是否仍然有效,因爲它尚未更新很久? – badc0re