如何在py2neo上执行事务后使用返回的节点?

时间:2014-01-16 19:24:50

标签: neo4j cypher py2neo

我使用以下代码成功合并了节点:

session = cypher.Session('http://192.168.56.20:7474/db/data/')
txa = session.create_transaction()
txa.append("""
  MERGE (frame:FRAME {timestamp:{props}.ts})
  ON CREATE SET frame:FIRST_FRAME
  RETURN frame
""", props)
txa.commit()
result, = txa.commit()
frame, = result[0]

日志文件如下所示:

INFO:py2neo.packages.httpstream.http:>>> POST http://192.168.56.20:7474/db/data/transaction/commit [910]
DEBUG:py2neo.packages.httpstream.http:>>> Host: 192.168.56.20:7474
DEBUG:py2neo.packages.httpstream.http:>>> Content-Type: application/json
DEBUG:py2neo.packages.httpstream.http:>>> X-Stream: true;format=pretty
DEBUG:py2neo.packages.httpstream.http:>>> User-Agent: py2neo/1.6.1 HTTPStream/1.1.0          Python/2.7.5-final-0 (darwin)
INFO:py2neo.packages.httpstream.http:<<< 200 OK [chunked]
DEBUG:py2neo.packages.httpstream.http:<<< transfer-encoding: chunked
DEBUG:py2neo.packages.httpstream.http:<<< access-control-allow-origin: *
DEBUG:py2neo.packages.httpstream.http:<<< server: Jetty(9.0.5.v20130815)
DEBUG:py2neo.packages.httpstream.http:<<< content-type: application/json
DEBUG:py2neo.packages.httpstream.http:<<< content-encoding: UTF-8

返回的结果变量是:

[Record(columns=(u'frame',), values=(Node('http://0.0.0.0:7474/db/data/node/24'),))]

注意错误的uri(0.0.0.0)

当我尝试使用返回的节点实例时,抛出了Connection Exception。即:

frame.remove_labels('FIRST_FRAME')

py2neo.packages.httpstream.http.SocketError: Connection refused

通过记录的跟踪,我可以看到它试图从错误的服务器获取数据:

INFO:py2neo.packages.httpstream.http:>>> GET http://0.0.0.0:7474/db/data/node/24/properties

我做错了什么?

2 个答案:

答案 0 :(得分:2)

这肯定是一个奇怪的回答 - 我假设您没有在代码中的任何位置使用rewrite函数?如果是,请检查其配置,如果没有,您可以尝试其他一些事项:

  1. 您的服务器前面是否有一个代理层?这通常用于应用身份验证或类似。如果是这样,请尝试绕过这个并直接进入服务器以查看是否仍然出现问题。
  2. 尝试使用命令行中的cURL执行相同的请求,以查看原始响应。这可以帮助确认0.0.0.0在什么级别被替换。

答案 1 :(得分:0)

我遇到了同样的问题,结果是由于Neo4j服务器配置。

http://docs.neo4j.org/chunked/stable/server-configuration.html

我有:

#allow any client to connect
org.neo4j.server.webserver.address=0.0.0.0

需要是您在Py2Neo中使用的实际IP地址:

#allow any client to connect
org.neo4j.server.webserver.address=real-ip-here (192.168.56.20 in your example)