说,我想使用例如存储在table.dataTable {
margin-top: 84px !important;
position: relative;
}
thead {
position: absolute;
top: -89px;
display: table-header-group;
}
中的数据来更新相当数量的现有节点。由于我知道如何编写可处理单个节点更新的参数化查询,因此我的基本解决方案是在循环中设置此查询,然后为数据框中的每一行运行该查询。
pd.Dataframe
但是,必须有一种更直接(更快)的方式将此信息传递给查询,以便在服务器端对迭代进行“管理”。真的吗?我还没有找到任何相关文档。
答案 0 :(得分:1)
您可以通过运行密码LOAD查询并提供包含您的数据的csv文件来做到这一点:
LOAD CSV WITH HEADERS FROM 'file:///file.csv' as csvLine fieldterminator ';'
MATCH (p:Person {name:csvLine.name, p.surname:csvLine.surname})
SET p.description=csvLine.description
但是我认为没有解决方案可以将数据数组传递到匹配循环。
答案 1 :(得分:1)
与其像这样循环,不如对每个条目执行一个Cypher查询,您应该将所有内容收集到地图对象的列表参数中,并进行单个Cypher查询(尽管如果您有> 100k左右的条目,则可以将其批量处理)。迈克尔·亨格(Michael Hunger)拥有good blog entry on this approach。
您可以在list参数上使用UNWIND将其转换为行,并一次处理所有内容。假设您以data
的身份进入列表:
UNWIND $data as row
MATCH (p:Person)
WHERE p.name = row.name AND p.surname = row.surname
SET p.description = row.description
答案 2 :(得分:0)
InverseFalcon的答案已经解决了基本问题,但是为了提供包括py2neo
和pandas bits
在内的完整答案,我将代码发布如下:
query='''UNWIND {batch} AS row
MATCH (p:Person)
WHERE p.name=row.name AND p.surname = row.surname
SET p.description=row.description '''
graph.run(query,batch=df.to_dict(orient='records'))
因此,最后,这更像是一个neo4j
而不是一个py2neo
问题,而neo4j文档中的相关信息是here