【问题标题】:Create multiple nodes with a parameter for their properties in Neo4j with Python使用 Python 在 Neo4j 中使用参数为其属性创建多个节点
【发布时间】:2017-10-03 12:32:21
【问题描述】:

我正在尝试在 Python 中实现同样的场景:https://neo4j.com/docs/developer-manual/current/cypher/clauses/create/#create-create-multiple-nodes-with-a-parameter-for-their-properties

我想要做的是将维基百科页面中找到的所有链接作为节点插入到图表中,但我被困在创建步骤中。

import wikipedia
from py2neo import Graph

first_page = "United Kingdom"

page = wikipedia.page(first_page)

page_name = page.title
page_id = page.pageid
links = page.links

graph = Graph(bolt=True, password="mypassword")

nodes = {}
nodes['Page'] = list({"title" : c} for c in page.links)
node = "UNWIND {json} as data CREATE (n) SET n = data"
graph.run(node, json=nodes)

如果我打印 nodes 字典,它的格式与上面来自 Neo4j 文档的链接中显示的格式完全相同,以下供参考。

{
  "props" : [ {
    "name" : "Andres",
    "position" : "Developer"
  }, {
    "name" : "Michael",
    "position" : "Developer"
  } ]
}

但在我的情况下,我收到以下错误消息:

py2neo.status.CypherTypeError:属性值只能是原始类型或其数组。

我正在尝试找到一种使用单个语句创建节点的方法,这甚至可以使用 Python 实现吗?

【问题讨论】:

  • 该问题与您将一组 json 对象发送到 Neo4j 的事实有关,这是不允许的。
  • 嗨 Bruno,我可以看到,但我仍然不明白如何使用 Python 在他们的文档页面上实现示例。

标签: python database graph neo4j py2neo


【解决方案1】:

错误是由于您传递的 json/object 引起的。 UNWIND 仅使用列表。尝试传递“nodes['Page']”,而不是像下面这样的“nodes”。

import wikipedia
from py2neo import Graph

first_page = "United Kingdom"

page = wikipedia.page(first_page)

page_name = page.title
page_id = page.pageid
links = page.links

graph = Graph(bolt=True, password="mypassword")

nodes = {}
nodes['Page'] = list({"title" : c} for c in page.links)
node = "UNWIND {json} as data CREATE (n) SET n = data"
graph.run(node, json=nodes['Page'])

或者你可以使用python的neo4j-driver,它更简单。

import wikipedia
from neo4j.v1 import GraphDatabase, basic_auth

driver = GraphDatabase.driver("bolt://localhost:5687",auth=basic_auth("neo4j","neo"))
session = driver.session()

first_page = "United Kingdom"

page = wikipedia.page(first_page)

page_name = page.title
page_id = page.pageid
links = page.links

nodes = list({"title" : c} for c in page.links)

query = "UNWIND {nodes} as data CREATE (n:Test) SET n = data;"

result = session.run(query,nodes=nodes)
print result 

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2018-11-04
    • 1970-01-01
    • 2023-01-30
    相关资源
    最近更新 更多