问题描述
我在通过 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 (将#修改为@)