py2neo 不更新数据库节点

问题描述

我在通过 py2neo 更新 neo4j 数据库中的节点时遇到问题。我正在尝试从几个文本文件提取网络图。我的脚本提取必要的信息并创建节点和关系,然后将它们写入数据库。虽然这对某些节点工作正常,但我反复遇到数据库中没有所有属性的节点。

当我为这样的节点逐行运行脚本时,可以很好地提取信息并在 python 中创建对象,但是在传输到 neo4j 的过程中,信息在某些时候丢失了。我执行 .push() 或 tx.commit() 运行时没有错误,但是当我在 neo4j 资源管理器中查询节点时,信息不存在。下面的示例适用于节点,但同样适用于关系及其属性

我正在使用

  • Windows 10
  • Anaconda,版本 1.10
  • Python,版本 3.7.9
  • neo4j-desktop,版本:1.3.11
  • Neo4j 数据库,版本:3.5.25
  • py2neo,版本(日志:4.2.0 | pip:2020.1.1)
from py2neo.matching import *

graphdb=Graph(user="user",password="password")

def g_commit(*nds):
    graphdb=Graph(user="neo4j",password="aqnetwork2021")
    tx=graphdb.begin()
    c=0
    for n in nds:
        if "py2neo.data." in str(type(n)):
            tx.create(n)
            c=c+1
    if c>0:
        try:
            fdb=tx.commit()
        except Exception as e:
            if hasattr(e,'message'):
                fdb=e.message
            else:
                fdb=e
    else:
        fdb="No Node or Relationship Objects found"
    return fdb

def checkNode(label,ident):
    check=graphdb.nodes.match(label,id=ident).first()
    if check == None:
        chckNode=Node(label,id=ident)
        chckNode.__primarylabel__=label
        chckNode.__primarykey__="id"
        g_commit(chckNode)
    else:
        chckNode=check
        chckNode.__primarylabel__=label
        chckNode.__primarykey__="id"
    return chckNode


pr_node=checkNode("pressrelease",id)
pr_node["date"]= date #string
pr_node["heading"]=heading #string
pr_node["acion"]=action #string
g_commit(pr_node)

如果我在 Python 中检查对象,我会得到

dict(pr_node)
 
{'id': 'AB/12345','date': '02.10.2015','heading': 'Something important','acion': 'adds'}

通过日志模块创建的日志显示以下内容,我将其解释为成功

2021-01-12 21:10:02,474 - Adding connection pool for profile ConnectionProfile('bolt://neo4j@localhost:7687')
2021-01-12 21:10:02,474 - Trying to acquiring connection from pool <ConnectionPool profile=ConnectionProfile('bolt://neo4j@localhost:7687') in_use=0 free=0 spare=100>
2021-01-12 21:10:02,474 - [#0000] C: (Dialing <localhost:7687>)
2021-01-12 21:10:02,476 - [#F234] S: (Accepted)
2021-01-12 21:10:02,476 - [#F234] C: <BOLT>
2021-01-12 21:10:02,476 - [#F234] C: <PROTOCOL> 4.1 | 4.0 | 3.0 | 2.0
2021-01-12 21:10:02,476 - [#F234] S: <PROTOCOL> 3.0
2021-01-12 21:10:02,476 - [#F234] C: HELLO {'user_agent': 'py2neo/4.2.0 Python/3.7.9-final-0 (win32)','scheme': 'basic','principal': 'neo4j','credentials': '*******'}
2021-01-12 21:10:02,476 - [#F234] C: (Sent 116 bytes)
2021-01-12 21:10:02,477 - [#F234] S: SUCCESS {'server': 'Neo4j/3.5.25','connection_id': 'bolt-83'}
2021-01-12 21:10:02,477 - Acquired connection <py2neo.client.bolt.Bolt3 object at 0x0000017DBFC93D88>
2021-01-12 21:10:02,477 - Releasing connection <py2neo.client.bolt.Bolt3 object at 0x0000017DBFC93D88>
2021-01-12 21:10:02,477 - Attempting to acquire connection to default database
2021-01-12 21:10:02,477 - Using connection pool <ConnectionPool profile=ConnectionProfile('bolt://neo4j@localhost:7687') in_use=0 free=1 spare=99>
2021-01-12 21:10:02,477 - Trying to acquiring connection from pool <ConnectionPool profile=ConnectionProfile('bolt://neo4j@localhost:7687') in_use=0 free=1 spare=99>
2021-01-12 21:10:02,477 - [#F234] C: BEGIN {}
2021-01-12 21:10:02,478 - [#F234] C: (Sent 7 bytes)
2021-01-12 21:10:02,478 - [#F234] S: SUCCESS {}
2021-01-12 21:10:02,478 - [#F234] C: COMMIT
2021-01-12 21:10:02,478 - [#F234] C: (Sent 6 bytes)
2021-01-12 21:10:02,479 - [#F234] S: SUCCESS {'bookmark': 'neo4j:bookmark:v1:tx49427'}
2021-01-12 21:10:02,479 - Releasing connection <py2neo.client.bolt.Bolt3 object at 0x0000017DBFC93D88>

我在 neo4j 中检查对象,但是我得到

MATCH(n:pressrelease) WHERE (n.id="AB/12345") RETURN n

{
  "identity": 9770,"labels": [
    "pressrelease"
  ],"properties": {
"id": "SC/12067"
  }
}

有时,当我使用 graphdb.push() 时,这有效,但不可靠。

我的代码中是否遗漏了什么?我有点不知道在哪里寻找错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)