def pull(self): query = CypherQuery(self.graph, "START a=node({a}) RETURN a") results = query.execute(a=self._id) node, = results[0].values super(Node, self).properties.clear() super(Node, self).properties.update(node.properties) self._Node__stale.clear()
def get_movie(title): query = CypherQuery(graph, "MATCH (movie:Movie {title:{title}}) " "OPTIONAL MATCH (movie)<-[r]-(person:Person) " "RETURN movie.title as title," "collect([person.name, head(split(lower(type(r)),'_')), r.roles]) as cast " "LIMIT 1") results = query.execute(title=title) row = results.data[0] return {"title": row["title"], "cast": [dict(zip(("name", "job", "role"), member)) for member in row["cast"]]}
def get_search(): try: q = request.query["q"] except KeyError: return [] else: query = CypherQuery(graph, "MATCH (movie:Movie) " "WHERE movie.title =~ {title} " "RETURN movie") results = query.execute(title="(?i).*" + q + ".*") response.content_type = "application/json" return json.dumps([{"movie": row["movie"].get_cached_properties()} for row in results.data])
def execute(graph, query, params=None, row_handler=None, metadata_handler=None, error_handler=None): query = CypherQuery(graph, query) data, metadata = [], None try: results = query.execute(**params or {}) except CypherError as err: if error_handler: error_handler(err.message, err.exception, err.stack_trace) else: raise else: metadata = Metadata(results.columns) if metadata_handler: metadata_handler(metadata) if row_handler: for record in results: row_handler(list(record)) return data, metadata else: return [list(record) for record in results], metadata
def get_graph(): query = CypherQuery(graph, "MATCH (m:Movie)<-[:ACTED_IN]-(a:Person) " "RETURN m.title as movie, collect(a.name) as cast " "LIMIT {limit}") results = query.execute(limit=request.query.get("limit", 100)) nodes = [] rels = [] i = 0 for movie, cast in results.data: nodes.append({"title": movie, "label": "movie"}) target = i i += 1 for name in cast: actor = {"title": name, "label": "actor"} try: source = nodes.index(actor) except ValueError: nodes.append(actor) source = i i += 1 rels.append({"source": source, "target": target}) return {"nodes": nodes, "links": rels}
import json from py2neo.neo4j import CypherQuery, GraphDatabaseService, WriteBatch from py2neo import neo4j db = neo4j.GraphDatabaseService() business_index_query = CypherQuery(db, "CREATE INDEX ON :Business(id)") business_index_query.execute() category_index_query = CypherQuery(db, "CREATE INDEX ON :Category(name)") category_index_query.execute() create_business_query = ''' // MERGE ON categories CREATE (b:Business {id: {business_id}, name: {name}, lat:{latitude}, lon:{longitude}, stars: {stars}, review_count: {review_count}}) ''' merge_category_query = ''' MATCH (b:Business {id: {business_id}}) MERGE (c:Category {name: {category}}) CREATE UNIQUE (c)<-[:IS_IN]-(b) ''' print "Beginning business batch" with open('data/yelp_academic_dataset_business.json', 'r') as f: business_batch = WriteBatch(db) count = 0 for b in (json.loads(l) for l in f): business_batch.append_cypher(create_business_query, b) count += 1