【问题标题】:Cannot view the nodes I created using py2neo using a cypher query in the browser无法在浏览器中使用密码查询查看我使用 py2neo 创建的节点
【发布时间】:2014-08-15 05:22:09
【问题描述】:

我正在使用 py2neo 创建节点,如下所示:

from py2neo import neo4j 
graph_db =  neo4j.GraphDatabaseService("http://localhost:7474/db/data")

print graph_db.neo4j_version
graph_db.clear()

if not graph_db.get_index(neo4j.Node, "Kiran"):
        from py2neo import node,rel
        trial = graph_db.create(
        node(name="Kiran"),
        node(name="teja"),
        rel(0, "Brother", 1),
        )

#else:
details = graph_db.get_index(neo4j.Node, "Kiran")
print details

get_index 会返回一些数据,例如

Index(Node, u'http://localhost:7474/db/data/index/node/Kiran')

但是当我在浏览器上搜索节点时,它什么也没返回... 我在这里做错了吗?

我也在尝试发布一些网络信息如下:

from py2neo import neo4j
from py2neo import node,rel
graph_db = neo4j.GraphDatabaseService("http://localhost:7474/db/data")

def nodepublish(dpid, port, mac):
  if graph_db.get_index( neo4j.Node, dpid ) == None:
    create = graph_db.create({"DPID": dpid})
    print "switch "+str(dpid)+" added to graph"
  if graph_db.get_index( neo4j.Node, mac ) == None:
    query = neo4j.CypherQuery(graph_db, "MATCH (sw) WHERE sw.DPID = "+str(dpid)+" CREATE (nd {MAC: "+str(mac)+"}) CREATE (sw)-[:connected {PORT: "+str(port)+"}]->(nd)")
    print "node "+str(mac)+" added to graph"

当我像

一样调用 nodepublish() 函数时
nodepublish(1,1,"aa:aa:aa:aa:aa:aa")

它每次都使用 dpid:1 创建一个新节点,而不是在 get_index 不返回 None 时跳过 if 语句。

有人可以帮我解决这个问题吗?

谢谢!

【问题讨论】:

    标签: python neo4j cypher py2neo


    【解决方案1】:

    第 1 点:确保您的 GraphDatabaseService URI 上有一个斜杠。没有它,您可能会得到不正确的结果。

    第 2 点:您在此处使用遗留索引。通过阅读this,清楚您使用的是哪种类型的索引。

    我认为您混淆了 indexesindex 条目index(在本例中可能称为People)指向一组条目,每个条目由键值对标识。在每个入口点,您可以引用一个或多个节点。阅读有关旧索引的更多信息here

    您可能希望您的代码看起来更像这样:

    from py2neo import neo4j 
    graph_db = neo4j.GraphDatabaseService("http://localhost:7474/db/data/")
    
    # Create a "People" index if one doesn't already exist
    people = graph_db.get_or_create_index(neo4j.Node, "People"):
    
    # Create two people nodes if they don't already exist
    kiran = people.get_or_create("name", "Kiran", {"name": "Kiran"})
    teja = people.get_or_create("name", "Teja", {"name": "Teja"})
    
    # Relate the two
    brothers, = graph_db.create((kiran, "BROTHER", teja))
    
    print kiran
    print teja
    print brothers
    

    This page 可能对代码中的一些细节有所帮助,因为它描述了您在此处需要的旧索引函数。

    【讨论】:

    • 这似乎行得通。谢谢你。我有一个疑问:兄弟,= 表示什么?我搜索了它,找不到任何东西。
    • create 方法总是返回一个列表,即使只创建一件事。这在文档中明确提到 -> nigelsmall.com/py2neo/1.6/graphs_nodes_relationships/…
    • 我还有一个问题:假设我有一个节点{"name": "john smith" , "city": "houston", "age" : "31" } 我有一个新条目为同一个约翰史密斯发布但使用不同的城市,我想发布新节点并从旧节点复制剩余属性并将其删除。我该怎么做? >>>>如果存在同名节点:如果属性不同:创建一个新节点并复制属性并删除旧节点否则:什么都不做>>>>我怎样才能做到这一点?
    • 你不能轻易地一步完成,但你可能不想这样做。阅读标签模式索引唯一约束和Cypher MERGE关键字。然后针对您无法从文档和实验中解决的任何问题发布一个新的 StackOverflow 问题。
    • 当然。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多