问题标签 [neo4j-python-driver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2138 浏览

python - Neo4j 驱动 - 确认交易成功

我刚刚开始使用新的用于 python 的 neo4j 驱动程序并且完全被事务卡住了。如何检查交易是否成功完成?据我所知,commit函数不会自动引发任何错误,例如,如果我向它提供了不正确的 Cypher 查询,我不会得到任何信息。

我尝试从对象中读取last_result参数Session并想出了类似的东西:

它有点工作......然而,它确实需要修改私有属性,而且看起来并不正确/正确。必须有一个更简单、更优雅的解决方案。

提前感谢您的帮助。

编辑:只是为了明确Transaction.success表示事务是否应该提交或回滚。然而,例如,Cypher 错误可以晚于查询的执行时间来识别。

0 投票
1 回答
792 浏览

python-3.x - 无法在 python 上运行 neo4j 的密码查询

一直在尝试使用 python 运行查询 neo4j 数据库。该代码适用于最简单的查询,但并非适用于所有查询。我没有得到任何异常,并且不了解日志文件的根本原因。

我的代码看起来像这样..

简单查询运行良好,但其他查询不运行。它是一个示例查询,适用于我本地主机上的 neo4j gui

在调试日志文件中,我得到了这两种错误日志:

2016-07-06 22:14:27.062+0000 错误 [onbvtBoltProtocolV1] 无法向驱动程序写入响应

java.lang.NullPointerException at org.neo4j.bolt.v1.transport.ChunkedOutput.ensure(ChunkedOutput.java:156) at org.neo4j.bolt.v1.transport.ChunkedOutput.writeShort(ChunkedOutput.java:90) at org. neo4j.bolt.v1.packstream.PackStream$Packer.packStructHeader(PackStream.java:304) 在 org.neo4j.bolt.v1.messaging.PackStreamMessageFormatV1$Writer.handleFailureMessage(PackStreamMessageFormatV1.java:154) 在 org.neo4j.bolt。 v1.messaging.msgprocess.MessageProcessingCallback.publishError(MessageProcessingCallback.java:48) 在 org.neo4j.bolt.v1.messaging.msgprocess.MessageProcessingCallback.completed(MessageProcessingCallback.java:98) 在 org.neo4j.bolt.v1.messaging。 msgprocess.MessageProcessingCallback.completed(MessageProcessingCallback.java:31) 在 org.neo4j.bolt.v1.runtime.internal.SessionStateMachine。在 org.neo4j.bolt.v1.runtime.internal.SessionStateMachine.run(SessionStateMachine.java:655) 之后 (SessionStateMachine.java:823) 在 org.neo4j.bolt.v1.runtime.internal.concurrent.SessionWorkerFacade.lambda$ run$3(SessionWorkerFacade.java:68) at org.neo4j.bolt.v1.runtime.internal.concurrent.SessionWorker.execute(SessionWorker.java:116) at org.neo4j.bolt.v1.runtime.internal.concurrent.SessionWorker .run(SessionWorker.java:77) 在 java.lang.Thread.run(Thread.java:745)java.lang.Thread.run(Thread.java:745) 处的 internal.concurrent.SessionWorker.run(SessionWorker.java:77)java.lang.Thread.run(Thread.java:745) 处的 internal.concurrent.SessionWorker.run(SessionWorker.java:77)

2016-07-06 20:52:20.588+0000 错误 [onbtSocketTransportHandler] 处理客户端连接时发生致命错误:对等方重置连接 java.io.IOException:对等方在 sun.nio.ch 重置连接。在 sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) 在 sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) 在 sun.nio.ch.IOUtil 的 FileDispatcherImpl.read0(Native Method)。在 io.netty.buffer.PooledUnsafeDirectByteBuf.setBytes(PooledUnsafeDirectByteBuf.setBytes(PooledUnsafeDirectByteBuf.java:311) 在 io.netty.buffer.AbstractByteBuf 的 sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380) 读取(IOUtil.java:192) .writeBytes(AbstractByteBuf.java:881) 在 io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:242) 在 io.netty.channel.nio。AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:119) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)在 io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382) 在 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354) 在 io.netty.util.concurrent.SingleThreadEventExecutor$2。在 java.lang.Thread.run(Thread.java:745) 处运行(SingleThreadEventExecutor.java:111)382) 在 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354) 在 io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111) 在 java.lang.Thread.run(线程.java:745)382) 在 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354) 在 io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111) 在 java.lang.Thread.run(线程.java:745)

我在我的系统上使用社区版 neo4j,python 版本 3.5

提前致谢 :)

0 投票
0 回答
650 浏览

python - 高效导入 Cypher 语句

我正在尝试将数据库导出到文件并再次导入,而不复制实际的数据库文件或停止数据库。我意识到有许多优秀的(和高性能的)neo4j-shell-tools,但是 Neo4j 数据库是远程的,export-*andimport-*命令要求文件驻留在远程客户端上,而对于我的情况,这些文件驻留在本地。

以下帖子解释了导出/导入数据的替代方法,但导入的性能并不过分。

以下示例使用我们的数据存储子集,该子集包含 10,000 个具有各种标签/属性的节点,用于测试目的。首先,数据库通过以下方式导出,

然后擦,

在重新导入之前,

这似乎并不过分表现。我还尝试了 Python 路由,以纯格式导出 Cypher:

以下代码段在大约 30 秒内运行(使用 1,000 的批量大小),

我意识到参数化的 Cypher 查询更加优化我使用了有点笨拙的逻辑(注意字符串替换并不适用于所有情况)来尝试从 Cypher 代码中提取标签和属性(在 ~ 8 秒内执行):

使用UNWIND而不是事务进一步将性能提高到约 5 秒:

这是加快 Cypher 导入的正确方法吗?理想情况下,我希望不必在 Python 中进行这种级别的操作,部分原因是它可能容易出错,而且我必须为关系做类似的事情。

还有人知道解码 Cypher 以提取属性的正确方法吗?如果属性中有反引号 (`),则此方法将失败。注意我不想走 GraphML 路线,因为我还需要通过 Cypher 格式导出的模式。虽然以这种方式打开 Cypher 的包装确实感觉很奇怪。

最后作为参考,import-binaryshell 命令需要大约 3 秒来执行相同的导入:

0 投票
1 回答
92 浏览

python - 使用 python 从自制库调用 session.run() 时无法正常运行

我在 python 中创建了一个包含各种函数的库,当称为映射节点之间的关系时。当我从库中调用这些函数时,我一直面临问题,它们往往会偶尔工作。当我在主文件中运行相同的代码时,它会完美执行。我的问题是,是否不建议从 SELF MADE 库运行对 neo4j 的查询。

我有一个函数可以在节点 A 和节点 B 之间创建关系。它在一个运行 5 次的循环中。但令人惊讶的是,它只在各个节点之间创建了一两个关系。当我在主文件中运行时,相同的代码运行完美。

有人可以指导我完成这个,因为当我在网上搜索时我无法得到任何答案。

[编辑 1]

上面提到的代码就是函数。它位于一个名为 basics 的库中,我在主 python 代码中将其称为:

(出于某种原因,我在这里删除了 for 循环,但这段代码偶尔也会映射。)

0 投票
1 回答
324 浏览

python - 在 Neo4j 数据库上应用 python 包 graph-tools / network x

我正在 ICIJ 的巴拿马论文上着手一个关于 Neo4j 数据库的自我探索项目。

目标:我想在 Neo4j 上找到的数据库上运行进行网络分析的 python 包,例如 graph-tool、networkx。

因此,这些是我采取的步骤:

  1. 加载我确实加载的 Neo4j 驱动程序
  2. 通过pycharm连接Neo-4j沙箱

这是代码:

#

#

这是显示的错误消息:

neo4j.exceptions.ServiceUnavailable:无法获取到地址的连接(主机='34.239.248.240',端口=33621)

我从沙盒网站获得了 bolt/port/host: https ://neo4j.com/sandbox-v2/

另外,我尝试检查 neo4j-driver 是否已正确安装,并运行了 testdriver 代码:

#

#

其中显示了此错误代码:

neo4j.exceptions.SecurityError: 无法建立到“[SSL: UNKNOWN_PROTOCOL] 未知协议 (_ssl.c:749)”的安全连接

你能建议吗?

0 投票
1 回答
416 浏览

neo4j - 使用 Python-Neo4j 创建新关系不会产生任何结果

我正在围绕以下设计原则建立一个基于时间的图形数据库:

在此处输入图像描述

我有一个程序应该在数据库中创建新的时间点(相关时)。我使用二进制搜索找到相关节点,然后尝试删除现有关系(如果需要)并创建新关系。

我尝试连接的两个节点(204452 和 203838)存在,可以使用以下语法检索:

上述查询产生以下子图(表明各个查询有效,对吗?)

在此处输入图像描述 在此处输入图像描述

但是,当我尝试使用以下查询创建连接时:

什么都没有发生,Neo4j 网站前端(我用来尝试识别问题)给出了关于笛卡尔积的警告。我承认我最近才开始使用 Neo4j,因此我会提到我认为上述查询应该做什么:

第一MATCH行定义并运行第一个子查询,返回 203838 子图。第二MATCH行定义并运行第二个子查询,返回 204452 子图。最后,该CREATE行创建了通过上述子查询获取的两个时间节点之间的关系。

但是,由于没有发生任何事情,我认为我对上述查询的理解是错误的,我想知道Q1。它实际上做了什么和Q2。这样做的正确方法是什么?

0 投票
1 回答
1105 浏览

python - 使用适用于 python 的 neo4j 驱动程序的服务不可用错误

我是 neo4j 的新手,正在尝试执行 neo4j 网站中提供的演示项目(电影搜索)。这样做时,我从 python 实例化 neo4j 服务器时遇到错误。或者,我可以在外部启动和运行 neo4j 服务器并使用它。请找到 python 代码片段和错误详细信息 -

当我运行上面提到的代码时,我收到以下错误消息:

请指教。提前致谢!

0 投票
1 回答
343 浏览

database - NEO4J MERGE 未按预期工作

我是 neo4j 的新手,遇到 MERGE 子句的问题。我有一个方法来做这样的查询:

然后,我调用这样的方法:

所以,在那之后,我期待这个:

但是,我得到了这个:

此外,如果我再次拨打相同的电话,我会得到:

谁能解释一下发生了什么,我做错了什么?我在互联网上寻找,但我找不到任何对我有帮助的东西。

0 投票
0 回答
281 浏览

neo4j - onbvtBoltProtocolV1-无法向驱动程序写入响应关闭时无法写入缓冲区

我正在使用neo4j 3.1.3版本,但出现以下错误:

我使用了以下配置:

我的 neo4j 客户端是 Python,所以使用neo4j python 驱动程序,版本 1.5.3。我在客户端收到以下错误:

我正在像这样初始化驱动程序:

任何人都可以帮助我解决这个问题。我需要调整的任何配置,或我需要定义的任何其他配置?

0 投票
1 回答
205 浏览

neo4j - 使用密码查询时,螺栓连接会选择性地变慢,而基于 Web 的 GUI 总是很快

我有两个查询:q1 和 q2。我使用下面的代码来查询我的 neo4j 数据库。

q1 和 q2 均由 neo4j 在 Web 界面 ( http://localhost:7474/browser/ ) 中在大约 10 毫秒内执行。上面的代码也在大约 10 毫秒内执行 q1,但 q2 在 1 秒内执行。

为什么即使 web 界面执行速度快 100 倍,neo4j 螺栓连接也不像特定查询(q2)?我相信这不是连接开销,因为 q1 的执行速度几乎与任何一种方式一样快