用python编程在Neo4j中创建边

2024-10-01 17:38:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python为neo4j中的一些化学物质和相关反应生成节点和边,但是在创建节点/关系时遇到了一个问题。。。在

我的代码。。。在

from neo4j.v1 import GraphDatabase, basic_auth

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

def addReactionNeo4j(reagents, products, reaction):
    cypher = "CREATE (%s:Reaction {RXNid:\"%s\", name:\"%s\"})" % (reaction[0],reaction[1],reaction[2])
    session.run(cypher)
    print cypher

    for reagent in reagents:
        cypher = "CREATE (%s:Molecule {CHMid: \"%s\", smiles:\"%s\"})" % (reagent[0], reagent[1], reagent[2])
        session.run(cypher)
        print cypher
        cypher = "CREATE (%s)-[:REAGENT]->(%s)" %(reagent[0], reaction[0])
        print cypher
        session.run(cypher)

    for product in products:            
        cypher = "CREATE (%s:Molecule {CHMid: \"%s\", smiles:\"%s\"})" % (product[0], product[1], product[2])
        session.run(cypher)
        print cypher
        cypher = "CREATE (%s)-[:PRODUCT]->(%s)" %(reaction[0], product[0])
        session.run(cypher)   
        print cypher

reagents1 = []
reagents1.append(["Chem2","nbutylamine","CCCCN"])
reagents1.append(["Chem3","butanoicAcid","CCCCOO"])

products1 =[]
products1.append(["Chem1","Nbutylbutanamide","CCCCNC(O)CCCC"])

reaction1 = ["Reaction1", "reaction1", "AmideFormation"]

addReactionNeo4j(reagents1, products1, reaction1)


session.close()

这段代码应该编写cypher代码并在Neo4j中执行

它给出以下cypher代码作为输出

^{pr2}$

当粘贴到Neo4J中时,这段代码可以正常工作

enter image description here

但是如果我看代码创建的图(理论上应该执行相同的cypher代码),我得到了创建的节点,但是它有问题将节点与边连接在一起,使得节点没有连接。在

enter image description here

谁能告诉我我做错了什么吗?在

谢谢

克里斯


Tags: run代码auth节点sessiondrivercreateproduct
1条回答
网友
1楼 · 发布于 2024-10-01 17:38:37

我有个解决办法。在

如果我在neo4j跑步

CREATE (Reaction1:Reaction {RXNid:"reaction1", name:"AmideFormation"})
CREATE (Chem2:Molecule {CHMid: "nbutylamine", smiles:"CCCCN"})
CREATE (Chem3:Molecule {CHMid: "butanoicAcid", smiles:"CCCCOO"})
CREATE (Chem1:Molecule {CHMid: "Nbutylbutanamide", smiles:"CCCCNC(O)CCCC"})

然后跑。。。在

^{pr2}$

我可以复制连接节点的问题。但是如果我同时运行它们,一切都很好。在

因此,将我的代码改为使用MATCH-and-MERGE而不是简单的create可以解决这个问题。。。。在

^{3}$

相关问题 更多 >

    热门问题