def run(query, params=None, config=None, conn=None, **kwargs): """Executes a query and depending on the options of the extensions will return raw data, a ``ResultSet``, a Pandas ``DataFrame`` or a NetworkX graph. :param query: string with the Cypher query :param params: dictionary with parameters for the query (default=``None``) :param config: Configurable or NamedTuple with extra IPython configuration details. If ``None``, a new object will be created (defaults=``None``) :param conn: connection dictionary or string for the Neo4j backend. If ``None``, a new connection will be created (default=``None``) :param **kwargs: Any of the cell configuration options. """ if params is None: params = {} if conn is None: conn = Connection.get(DEFAULT_CONFIGURABLE["uri"]) elif isinstance(conn, string_types): conn = Connection.get(conn) if config is None: default_config = DEFAULT_CONFIGURABLE.copy() kwargs.update(default_config) config = DefaultConfigurable(**kwargs) if query.strip(): # TODO: Handle multiple queries params = extract_params_from_query(query, params) result = conn.session.query(query, params, data_contents=config.data_contents) if config.feedback: print(interpret_stats(result)) resultset = ResultSet(result, query, config) if config.auto_pandas: return resultset.get_dataframe() elif config.auto_networkx: graph = resultset.get_graph() resultset.draw() return graph else: return resultset # returning only last result, intentionally else: return 'Connected: %s' % conn.name
def execute_graph(self, line, cell='', local_ns={}): """Runs Cypher statement against a Neo4j graph database, specified by a connect string. If no database connection has been established, first word should be a connection string, or the user@host name of an established connection. Otherwise, http://localhost:7474/db/data will be assumed. Examples:: %%cyphergraph https://me:mypw@myhost:7474/db/data START n=node(*) RETURN n %%cyphergraph me@myhost START n=node(*) RETURN n %%cyphergraph START n=node(*) RETURN n Connect string syntax examples: http://localhost:7474/db/data https://me:mypw@localhost:7474/db/data """ # save globals and locals so they can be referenced in bind vars user_ns = self.shell.user_ns user_ns.update(local_ns) parsed = parse("""{0}\n{1}""".format(line, cell), self) conn = Connection.get(parsed['as'] or parsed['uri']) first_word = parsed['cypher'].split(None, 1)[:1] try: # pass all attributes except auto_html manually to new config :-( conf = DefaultConfigurable(auto_html=True, auto_limit=self.auto_limit, style=self.style, short_errors=self.short_errors, data_contents=self.data_contents, display_limit=self.display_limit, auto_networkx=self.auto_networkx, auto_pandas=self.auto_pandas, rest=self.rest, feedback=self.feedback, uri=self.uri) result = run(parsed['cypher'], user_ns, conf, conn) return result except StatusException as e: if self.short_errors: print(e) else: raise
def execute(self, line, cell='', local_ns={}): """Runs Cypher statement against a Neo4j graph database, specified by a connect string. If no database connection has been established, first word should be a connection string, or the user@host name of an established connection. Otherwise, http://localhost:7474/db/data will be assumed. Examples:: %%cypher https://me:mypw@myhost:7474/db/data START n=node(*) RETURN n %%cypher me@myhost START n=node(*) RETURN n %%cypher START n=node(*) RETURN n Connect string syntax examples: http://localhost:7474/db/data https://me:mypw@localhost:7474/db/data """ # save globals and locals so they can be referenced in bind vars user_ns = self.shell.user_ns user_ns.update(local_ns) parsed = parse("""{0}\n{1}""".format(line, cell), self) conn = Connection.get(parsed['as'] or parsed['uri'], parsed['as']) first_word = parsed['cypher'].split(None, 1)[:1] if first_word and first_word[0].lower() == 'persist': return self._persist_dataframe(parsed['cypher'], conn, user_ns) try: result = run(parsed['cypher'], user_ns, self, conn) return result except StatusException as e: if self.short_errors: print(e) else: raise
def execute(self, line, cell='', local_ns={}): """Runs Cypher statement against a Neo4j graph database, specified by a connect string. If no database connection has been established, first word should be a connection string, or the user@host name of an established connection. Otherwise, http://localhost:7474/db/data will be assumed. Examples:: %%cypher https://me:mypw@myhost:7474/db/data START n=node(*) RETURN n %%cypher me@myhost START n=node(*) RETURN n %%cypher START n=node(*) RETURN n Connect string syntax examples: http://localhost:7474/db/data https://me:mypw@localhost:7474/db/data """ # save globals and locals so they can be referenced in bind vars user_ns = self.shell.user_ns user_ns.update(local_ns) parsed = parse("""{0}\n{1}""".format(line, cell), self) conn = Connection.get(parsed['as'] or parsed['uri']) first_word = parsed['cypher'].split(None, 1)[:1] if first_word and first_word[0].lower() == 'persist': return self._persist_dataframe(parsed['cypher'], conn, user_ns) try: result = run(parsed['cypher'], user_ns, self, conn) return result except StatusException as e: if self.short_errors: print(e) else: raise