【问题标题】:Create Neo4j Nodes by passing a data variable in Python通过在 Python 中传递数据变量来创建 Neo4j 节点
【发布时间】:2014-11-25 10:32:39
【问题描述】:

我在 Python 中处理大型数据集,并希望从 Python 中的数据数组中创建 Neo4j 节点。因此,我的天真尝试将类似于以下内容。

(在 Python 脚本中)

Product_IDs = data_array[1:1000] # 这包含一个产品 ID 列表

tot_node_num = len(Product_IDs) # 表示产品ID的总数

图形 = 图形()

tx = graph.cypher.begin()

tx.append("FOREACH (r IN range(1,tot_node_num) | CREATE (:Product {ID:Product_IDs[r]}))")

tx.commit()

使用上述语句,变量:tot_node_num 和 Product_IDs 无法识别。如何传递我使用 python 脚本创建的数组以在 Neo4j 图形数据库中创建节点?

谢谢!

【问题讨论】:

  • 通过将 { } 放在变量名周围并添加参数定义来解决上述问题。因此,最后它看起来像 tx.append("FOREACH (r IN range(1,{tot_node_num}) | CREATE(:Product{ID: {Product_IDs}[r]}))", parameters={'tot_node_num' :tot_node_num, 'Product_IDs':Product_IDs})

标签: neo4j py2neo


【解决方案1】:

你说的很对——传递变量的最好方法是通过参数。但是请记住,虽然这适用于表达式和属性值,但参数不能用于标签和关系类型。为了解决这个问题,py2neo 提供了cypher_escape 函数(http://py2neo.org/2.0/cypher.html#py2neo.cypher.cypher_escape):

>>> from py2neo.cypher import cypher_escape
>>> rel_type = "KNOWS WELL"
>>> "MATCH (a)-[:%s]->(b) RETURN a, b" % cypher_escape(rel_type)
'MATCH (a)-[:`KNOWS WELL`]->(b) RETURN a, b'

【讨论】:

  • 谢谢奈杰尔!这是一个很好的提示!
猜你喜欢
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
  • 2021-07-08
相关资源
最近更新 更多