我在通过py2neo更新neo4j数据库中的节点时遇到问题。我试图从几个文本文件中提取网络图。我的脚本提取必要的信息,创建节点和关系,然后将它们写入数据库。虽然这对某些节点很有效,但我反复遇到数据库中的节点,这些节点没有所有应该存在的属性
当我为这样一个节点逐行运行脚本时,可以很好地提取信息,并使用python创建对象,但在传输到neo4j的过程中,这些信息会丢失。我执行.push()或tx.commit(),运行时没有错误,但在neo4j资源管理器中查询节点时,信息不在那里。下面的示例适用于节点,但同样适用于关系及其属性
我正在使用
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()时,这是可行的,但不可靠
我的代码中遗漏了什么吗?我有点不知所措,不知该在哪里查找错误
目前没有回答
相关问题 更多 >
编程相关推荐