Bulbsは、 3 つの異なるグラフ データベース サーバー ( Neo4j サーバー、Rexster、そして現在はTitan ) をサポートしています。
各バックエンド サーバーに固有のコードは、独自の Python パッケージ (ディレクトリ) に含まれています。次のディレクトリが表示されます: neo4jserver、rexster、titan:
Neo4jClient
Neo4j サーバー用の低レベル アダプターです。通常、カスタム処理を行う場合を除き、これを直接使用する必要はありません。代わりに、高レベルの Graph クラスを使用してください。
電球のドキュメントを参照してください...
Bulbs クイックスタート ガイドには、Graph
インターフェイスの使用例が記載されています。
ただし、Bulbs オブジェクトは、必要なときに_client
var.
Lightbulb は、Bulbs モデルの使用方法とカスタマイズ方法を示すために私が作成したサンプル アプリです。これは、Git をソース管理に使用し、グラフ データベースを永続化に使用する Python ブログ エンジンです。
Lightbulb はもともと、無料のNeo4j Heroku Add Onで使用するために設計されましたが、Bulbs と Lightbulb の両方でGremlinが多用されており、Neo4j Heroko Add On の無料版では Gremlin が提供されなくなりました。
Lightbulb モデル ファイルには、大幅にカスタマイズされたEntry
モデルとカスタムGraph
クラスが含まれています。このEntry
モデルは、低レベルのクライアントを使用します。
モデルでわかるように、 varEntry
を介して低レベルのクライアントにアクセスできます。これを使用してライブラリから Gremlin スクリプトを取得し、Gremlin スクリプトを再度実行します。_client
scripts
save_blog_entry
Entry モデルで使用される Gremlin スクリプトのコードは次のとおりです。
注: ファイルには Gremlin スクリプトが 1 つしかありませんが、サイズが大きく、いくつかの操作が含まれており、すべてがトランザクションにラップされています。すべての操作を単一の Gremlin スクリプトに入れることで、サーバーに複数のリクエストを送信するオーバーヘッドが発生するのではなく、1 つのトランザクション リクエストですべてを実行できます。
モデルのカスタマイズなどを行っていない限り、通常は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)
Bulbs Neo4j Gremlin ドキュメントを参照してください...
同様に、Neo4j Cypher クエリを実行する場合は、cypher
オブジェクトに格納されているgraph
オブジェクトを使用します。
Cypher には 3 つの方法があります (残念ながら、これらはまだ Web サイトに記載されていません)。
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)
query メソッドは、要素をその型に自動的に初期化します。要素をカスタム モデルとして作成した場合、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
...またはリストに変換...
>>> 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()
ご不明な点がございましたら、お気軽にお問い合わせください。