Ich versuche, eine JSON-Datei zu importieren, die durch eine API-Anforderung an StackOverflow zu NEO4J erhalten wurde. Ich habe diese tutorial verfolgt. Allerdings bekomme ich Fehler wie die folgenden bei dem Versuch, die Abfrage auszuführen:Importieren von JSON zu NEO4J mit py2neo
File "/Users/ahmedov/anaconda/lib/python2.7/site-packages/py2neo/cypher/core.py", line 306, in commit
return self.post(self.__commit or self.__begin_commit)
File "/Users/ahmedov/anaconda/lib/python2.7/site-packages/py2neo/cypher/core.py", line 261, in post
raise self.error_class.hydrate(error)
File "/Users/ahmedov/anaconda/lib/python2.7/site-packages/py2neo/cypher/error/core.py", line 54, in hydrate
error_cls = getattr(error_module, title)
AttributeError: 'module' object has no attribute 'SyntaxError'
ich den folgenden Code verwenden:
import os
import requests
from py2neo import neo4j
from py2neo import Graph
from py2neo import Path, authenticate
# set up authentication parameters
authenticate("localhost:7474", "neo4j", "neo4j")
# connect to authenticated graph database
#graph = Graph("http://localhost:7474/db/data/")
# Connect to graph and add constraints.
neo4jUrl = os.environ.get('NEO4J_URL',"http://localhost:7474/db/data/")
graph = neo4j.Graph(neo4jUrl)
# Connect to graph and add constraints.
#neo4jUrl = os.environ.get('NEO4J_URL',"http://localhost:7474/db/data/")
#graph = neo4j.GraphDatabaseService(neo4jUrl)
# Add uniqueness constraints.
graph.cypher.execute("CREATE CONSTRAINT ON (q:Question) ASSERT q.id IS UNIQUE;")
# Build URL.
apiUrl ="https://api.stackexchange.com/2.2/questions?pagesize=100&order=desc&sort=creation&tagged=neo4j&site=stackoverflow&filter=!5-i6Zw8Y)4W7vpy91PMYsKM-k9yzEsSC1_Uxlf"
# Send GET request.
json = requests.get(apiUrl, headers = {"accept":"application/json"}).json()
# Build query.
query = """
UNWIND data.items as q
MERGE (question:Question {id:q.question_id}) ON CREATE
SET question.title = q.title, question.share_link = q.share_link, question.favorite_count = q.favorite_count
MERGE (owner:User {id:q.owner.user_id}) ON CREATE SET owner.display_name = q.owner.display_name
MERGE (owner)-[:ASKED]->(question)
FOREACH (tagName IN q.tags | MERGE (tag:Tag {name:tagName}) MERGE (question)-[:TAGGED]->(tag))
FOREACH (a IN q.answers |
MERGE (question)<-[:ANSWERS]-(answer:Answer {id:a.answer_id})
MERGE (answerer:User {id:a.owner.user_id}) ON CREATE SET answerer.display_name = a.owner.display_name
MERGE (answer)<-[:PROVIDED]-(answerer)
)
"""
statement = "MERGE (n:Person {name:{N}}) RETURN n"
results = graph.cypher.run(query,json=json)
tx = graph.cypher.begin()
def add_names(*names):
for name in names:
tx.append(statement, {"N": name})
tx.process()
add_names("Homer", "Marge", "Bart", "Lisa", "Maggie")
add_names("Peter", "Lois", "Chris", "Meg", "Stewie")
tx.append(query,)
tx.commit()
# Send Cypher query.
Das Problem aus der folgenden Zeile stammt:
results = graph.cypher.run(query,json=json)
Ich musste die obige Zeile ändern, um sie an die neuere py2neo API anzupassen. Die ursprüngliche Linie sah wie folgt aus:
neo4j.CypherQuery(graph, query).run(json=json)
Also im Grunde, ich brauche einen Weg zu finden, Neo4j zu sagen, dass ich brauche die JSON-Datei mit dem angegebenen Abfrage zu verarbeiten. Ich habe versucht, den Dokumentarfilm zu lesen und ohne Erfolg im Internet zu suchen. Jede Hilfe wäre willkommen.
ich immer noch ein paar Fehler: File "/Users/ahmedov/neo4j.py", Zeile 14, in graph = Graph (neo4jUrl, secure = False) TypeError: __neu __() hat ein unerwartetes Schlüsselwort argument 'secure' erhalten Wenn ich dann secure = false entferne, bekomme ich: Datei "/Users/ahmedov/neo4j.py", Zeile 21, in graph.run ("CREATE CONSTRAINT ON (q: Frage) ASSERT q.id IST UNIQUE; ") AttributError: 'Graph' Objekt hat kein Attribut 'run' –
Ahmedov
es scheint, Sie haben ein Missverhältnis von py2neo Versionen, können Sie' pip installieren py2neo --upgrade' –
Thanks! endlich hat es funktioniert. Jetzt ist es an der Zeit, ein ähnliches Problem für den Java-Treiber zu lösen :) – Ahmedov