【发布时间】:2021-02-10 19:13:13
【问题描述】:
我已使用 Python 连接到 Neo4J 图形数据库,并希望将查询的返回结果存储在对象名称下(例如“df”),但由于某种原因,当我简单地打印输出时,Python 会打印每个匹配项对于给定的查询,但如果我尝试将其存储在一个对象下并调用该对象名称,它只会返回一个匹配项。例如,如果我运行以下命令(由于机密性,我必须匿名某些字符串和名称):
query_object = "x"
query = """MATCH (n {name:""" + "'" + query_object + "'" """}) RETURN n"""
edge_query = "MATCH (n {name:""" + "'" + query_object + "'" """})<-[r]-(y) RETURN y.name, n.value"""
with graphDB_Driver.session() as graphDB_Session:
graphDB_Session.run(query)
nodes = graphDB_Session.run(edge_query)
for node in nodes:
print(node)
我明白了:
<Record y.name='a' n.value=None>
<Record y.name='b' n.value=None>
<Record y.name='c' n.value=None>
<Record y.name='d' n.value=None>
但是,如果我运行:
with graphDB_Driver.session() as graphDB_Session:
graphDB_Session.run(query)
nodes = graphDB_Session.run(edge_query)
for x in nodes:
df = node
df
在这种情况下调用 df 只会返回:
<Record y.name='d' n.value=None>
有人能解释一下为什么会这样吗?如果是这样,我如何将整个返回的结果集存储在一个对象下,因为这对我目前正在处理的任务至关重要?
【问题讨论】:
-
我刚刚意识到运行图形数据库的第二个代码块状态为“for x in nodes”。这是一个错误,假设它声明“for node in nodes”。
-
我不是 Pythonista,但如果
dfnot 缩进 within for 循环,我假设df会指它被分配到的最后一个值。df应该是一个数组,df = node应该替换为df.append(node) -
感谢您的评论;我遇到的问题是“节点”是一个“记录”对象,当涉及到可以在其上执行的功能时,它似乎并不通用。所以我运行了 df.append(node) 并得到了错误:'Record' object has no attribute 'append'。
-
我没关注,你能分享声明df的代码吗?我认为像这样的东西:``` df = [] for node in nodes: df.append(node) df ``` 会起作用(或至少触发与您描述的不同的错误)。不是吗?
-
抱歉,我之前忘记将 df 称为空列表。它奏效了;非常感谢!!
标签: python database graph neo4j record