Bulbs obsługuje trzy różne serwery baz danych wykresu - Neo4j Server, Rexster, a teraz Titan.
Kod specyficzny dla każdego serwera zaplecza znajduje się w jego własnym pakiecie (katalogu) Python. Powinieneś zobaczyć katalogi dla: neo4jserver, rexster Titan:
Neo4jClient
jest adapter niskiego poziomu dla Neo4j Server - zazwyczaj nie ma potrzeby korzystania z tego bezpośrednio, chyba że robisz coś niestandardowego - zamiast tego użyj klasy Graph wysokiego poziomu.
Zobacz docs Żarówki ...
Przewodnik Cebulki Szybki przedstawiono przykłady dotyczące korzystania z interfejsu Graph
:
Jednak obiekty Bulbs zawsze mają dostęp do klienta niskiego poziomu, gdy jest on potrzebny, za pośrednictwem _client
var.
Żarówka jest przykładową aplikacją, którą stworzyłem, aby pokazać, jak używać i dostosowywać modele Żarówek - jest to silnik blogowy Python, który używa Git do kontroli źródła i graficznej bazy danych dla trwałości.
żarówkę został pierwotnie zaprojektowany do użytku z wolnej Neo4j Heroku Add On, ale obie żarówki i żarówkę w ogromnym stopniu korzystają z Gremlin i Neo4j Heroko Add On nie oferuje już Gremlin w wolnej wydanie.
Plik modelu Żarówka zawiera silnie dostosowanych Entry
model i niestandardowej klasy Graph
- model Entry
korzysta z klientem niskopoziomowych:
As można zobaczyć w modelu Entry
, mam dostęp do klienta niskiego poziomu za pośrednictwem _client
var, i używam go, aby uzyskać skrypt Gremlin z biblioteki scripts
, a następnie ponownie, aby wykonać skrypt Gremlina.
Oto kod dla Gremlin skryptu save_blog_entry
używane przez model aktu:
Uwaga: istnieje tylko jeden skrypt Gremlin w pliku, ale jest duży, zawiera kilka operacji i wszystko jest zawinięte w transakcję. Umieszczenie wszystkich operacji w pojedynczym skrypcie Gremlin pozwala na wykonanie jednej operacji transakcyjnej za pomocą , a nie na obciążenie związane z wysyłaniem wielu żądań do serwera.
Chyba że robisz coś takiego dostosowywania modelu, normalnie można użyć obiektu scripts
i obiekt gremlin
przechowywane na obiekcie :
>>> from bulbs.neo4jserver import Graph
>>> g = Graph()
>>> script = g.scripts.get('some_script')
>>> params = dict(name="James", city="Dallas")
>>> g.gremlin.execute(script, params)
Zobacz docs Cebulki Neo4j gremlin ...
Podobnie, jeśli chcesz wykonać kwerendę Neo4j Cypher, użyj obiektu cypher
przechowywanego na obiekcie .
Istnieją trzy metody Cypher (niestety nie są one udokumentowane na stronie internetowej jeszcze):
g.cypher.query()
: Używane po powrocie listę węzłów/relacji - będzie inicjować je do obiektów.
g.cypher.table()
: Używane, gdy zwracane są dane tabeli Cyphera.
g.cypher.exectue()
: Używane, gdy zwracane są arbitralne dane - zwraca ogólny obiekt Response
.
Możesz sprawdzić kod źródłowy, aby zobaczyć, jak działają ...
Oto przykłady zastosowania zapytanie szyfruje() sposobu (zapytanie prostu powraca związek)
>>> from bulbs.neo4jserver import Graph
>>> g = Graph()
>>> query = "start a = relationship({eid}) return a"
>>> params = dict(eid=123)
>>> edges = g.cypher.query(query, params)
Sposób zapytania automatycznie inicjuje elementy do ich typu. Jeśli element został utworzony jako model niestandardowy, Bulbs spróbuje zainicjować go do określonego typu, w przeciwnym razie będzie domyślnie generyczny Vertex
lub Edge
.
Należy zauważyć, że metoda zapytania Bulbs Cypher zwraca iterator.
Można pętli iteracyjnej nad ...
>>> 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
... lub przekonwertować go do listy ...
>>> 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)
... lub dostać następny element ...
>>> 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()
Proszę dać mi znać, jeśli masz więcej pytań.
dzięki za bardzo szczegółową odpowiedź z przykładami. – npobedina
Opcje zapytań typu "cypher" naprawdę mnie zaskoczyły, dopóki nie natknąłem się na to. Byłoby bardzo pomocne, aby znaleźć .query(), .table() i .execute() w dokumentacji! W przeciwnym razie jestem fanem żarówek - dzięki! – zanbri
Czy moduł nadal działa, ponieważ nie był aktualizowany przez długi czas? – badc0re