J'essaye d'importer un fichier JSON obtenu via une requête API vers StackOverflow vers NEO4J. J'ai suivi ce tutorial. Cependant, je reçois des erreurs comme suit en essayant d'exécuter la requête:Importer JSON à NEO4J en utilisant 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'
J'utilise le code suivant:
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.
Le problème provient de la ligne suivante:
results = graph.cypher.run(query,json=json)
J'ai dû changer la ligne ci-dessus pour l'ajuster à la plus récente api py2neo. La ligne originale ressemblait à ceci:
neo4j.CypherQuery(graph, query).run(json=json)
Donc, fondamentalement, je dois trouver un moyen de dire Neo4j que je dois traiter le fichier JSON en utilisant la requête donnée. J'ai essayé de lire le documentaire et de chercher sur le web sans aucune chance. Toute aide serait appréciée.
Je reçois encore quelques erreurs: Fichier "/Users/ahmedov/neo4j.py", ligne 14, en graph = Graph (neo4jUrl, secure = False) TypeError: __new __() a un argument de mot clé inattendu 'secure' puis, si je supprime secure = false, je reçois: Fichier "/Users/ahmedov/neo4j.py", ligne 21, en graph.run ("CREER CONTRAINT ON (q: Question) ASSERT q.id EST UNIQUE; ") AttributeError: l'objet 'Graph' n'a pas d'attribut 'run' –
Ahmedov
il semble que vous avez une incompatibilité de versions py2neo, pouvez-vous exécuter' pip installer py2neo --upgrade' –
Merci! finalement, ça marche. Il est maintenant temps de résoudre un problème similaire pour le pilote Java :) – Ahmedov