py2neo不更新数据库节点

2024-09-30 20:18:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我正在使用

  • 视窗10
  • Python,1.10版
  • Python,版本3.7.9
  • Neo4j桌面,版本: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 - Acquired connection <py2neo.client.bolt.Bolt3 object at 0x0000017DBFC93D88>
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()时,这是可行的,但不可靠

我的代码中遗漏了什么吗?我有点不知所措,不知该在哪里查找错误


Tags: inidnode节点prconnectionlabelcommit