2014-10-02 39 views
0

我試圖運行neomodel以下的Cypher查詢:的Neo4j,py2neo,Neomodel - Cypher支架最短路徑給錯誤 - 類型錯誤: 'NotImplementedType' 對象不是可調用

MATCH (b1:Bal { text:'flame' }), (b2:Bal { text:'candle' }), 
p = shortestPath((b1)-[*..15]-(b2)) 
RETURN p 

它通過對Neo4j的偉大工程服務器控制檯。它返回兩個連接關係的3個節點。然而,當我嘗試在Python以下幾點:

# Py2Neo version of cypher query in python 
from py2neo import neo4j 
graph_db = neo4j.GraphDatabaseService() 
shortest_path_text = "MATCH (b1:Bal { text:'flame' }), (b2:Bal { text:'candle' }), p = shortestPath((b1)-[*..15]-(b2)) RETURN p" 
results = neo4j.CypherQuery(graph_db, shortest_path_text).execute() 

# neomodel version of cypher query in python 
from neomodel import db 
shortest_path_text = "MATCH (b1:Bal { text:'flame' }), (b2:Bal { text:'candle' }), p = shortestPath((b1)-[*..15]-(b2)) RETURN p" 
results, meta = db.cypher_query(shortest_path_text) 

均可以得到以下錯誤:

 /Library/Python/2.7/site-packages/neomodel-1.0.1-py2.7.egg/neomodel/util.py in _hydrated(data) 
    73    elif obj_type == 'relationship': 
    74     return Rel(data) 
---> 75   raise NotImplemented("Don't know how to inflate: " + repr(data)) 
    76  elif neo4j.is_collection(data): 
    77   return type(data)([_hydrated(datum) for datum in data]) 

TypeError: 'NotImplementedType' object is not callable 

這是有道理的考慮neomodel基於py2neo。

主要問題是如何讓shortestPath查詢通過其中任何一個工作? python中有更好的方法嗎?或者是密碼的最佳方式呢?

編輯:
我也試過以下從here給出了同樣的錯誤。

graph_db = neo4j.GraphDatabaseService() 
    query_string = "START beginning=node(1), end=node(4) \ 
       MATCH p = shortestPath(beginning-[*..500]-end) \ 
       RETURN p" 

    result = neo4j.CypherQuery(graph_db, query_string).execute() 

    for r in result: 
     print type(r) # r is a py2neo.util.Record object 
     print type(r.p) # p is a py2neo.neo4j.Path object 

回答

2

好吧,我想通了。我用[這裏]教程(基於@奈傑爾小的回答

from py2neo import cypher 

session = cypher.Session("http://localhost:7474") 
tx = session.create_transaction() 

tx.append("START beginning=node(3), end=node(16) MATCH p = shortestPath(beginning-[*..500]-end) RETURN p") 
tx.execute() 

其返回。

[[Record(columns=(u'p',), values=(Path(Node('http://localhost:7474/db/data/node/3'), ('threads', {}), Node('http://localhost:7474/db/data/node/1'), ('threads', {}), Node('http://localhost:7474/db/data/node/2'), ('threads', {}), Node('http://localhost:7474/db/data/node/16')),))]] 

從這裏,我想我會誇大每個值回我的neomodel對象,並進入django更容易操作。將張貼代碼,因爲我到那裏。

0

您所提供的錯誤信息是特定於neomodel,看起來已經提出,因爲還沒有對充氣py2neo路徑在neomodel對象的任何支持。

然而,這應該在原py2neo中正常工作,因爲路徑完全受支持,所以它可能值得再次嘗試。 Py2neo當然不會從neomodel代碼中引發錯誤。我剛剛嘗試過shortestPath查詢,它會按預期返回一個值。

+0

謝謝你Nigel。你能發佈你的代碼示例嗎?我很好奇如何在python中運行原始py2neo密碼查詢正如我以爲這是我在上面做的.. – raschwab 2014-10-03 02:54:18

相關問題