在py2neo中创建节点后创建关系

0 投票
1 回答
590 浏览
提问于 2025-04-20 10:55

我现在正在研究遗传学,想学习py2neo来制作生物数据库,我还是个新手,所以请原谅我这个简单的问题。

我有一个密码子字典,长得像这样:

codon_dict={'A': ['GCT', 'GCC', 'GCA', 'GCG'], 'C': ['TGT', 'TGC'], 'E': ['GAA', 'GAG'], 'D': ['GAT', 'GAC'], 'G': ['GGT', 'GGC', 'GGA', 'GGG'], 'F': ['TTT', 'TTC'], 'I': ['ATT', 'ATC', 'ATA'], 'H': ['CAT', 'CAC'], 'K': ['AAA', 'AAG'], 'M': ['ATG'], 'L': ['CTT', 'CTC', 'TTA', 'CTA', 'TTG', 'CTG'], 'N': ['AAT', 'AAC'], 'Q': ['CAA', 'CAG'], 'P': ['CCT', 'CCC', 'CCA', 'CCG'], 'S': ['TCT', 'TCC', 'TCA', 'TCG', 'AGT', 'AGC'], 'R': ['CGT', 'CGC', 'CGA', 'AGA', 'CGG', 'AGG'], 'T': ['ACT', 'ACC', 'ACA', 'ACG'], 'W': ['TGG'], 'V': ['GTT', 'GTC', 'GTA', 'GTG'], 'Y': ['TAT', 'TAC'], 'Stop': ['TAA', 'TAG', 'TGA']}

还有一段简单的代码用来创建节点:

from py2neo import neo4j
from py2neo import node,rel

gdb=neo4j.GraphDatabaseService()

gdb.clear()

for i in codon_dict:
    gdb.create(({"aminoacid_name":i,"comprised_of":codon_dict[i]}))

这段代码给我带来了:

[Node('http://localhost:7474/db/data/node/9830')]
[Node('http://localhost:7474/db/data/node/9831')]
[Node('http://localhost:7474/db/data/node/9832')]
[Node('http://localhost:7474/db/data/node/9833')]
[Node('http://localhost:7474/db/data/node/9834')]
[Node('http://localhost:7474/db/data/node/9835')]
[Node('http://localhost:7474/db/data/node/9836')]
[Node('http://localhost:7474/db/data/node/9837')]
[Node('http://localhost:7474/db/data/node/9838')]
[Node('http://localhost:7474/db/data/node/9839')]
[Node('http://localhost:7474/db/data/node/9840')]
[Node('http://localhost:7474/db/data/node/9841')]
[Node('http://localhost:7474/db/data/node/9842')]
[Node('http://localhost:7474/db/data/node/9843')]
[Node('http://localhost:7474/db/data/node/9844')]
[Node('http://localhost:7474/db/data/node/9845')]
[Node('http://localhost:7474/db/data/node/9846')]
[Node('http://localhost:7474/db/data/node/9847')]
[Node('http://localhost:7474/db/data/node/9848')]
[Node('http://localhost:7474/db/data/node/9849')]
[Node('http://localhost:7474/db/data/node/9850')]

在运行完这段代码后,我得到了我想要的所有节点,但在创建节点后,我无法通过它们的名字或网址来给它们分配关系(比如(A,"is similar",V)或者(9850,"STOPS",9840))。

有没有办法在创建节点后单独创建关系,还是说我必须在创建它们的时候就把它们关联起来?

1 个回答

3

mehmet,

这里有一个链接,可以告诉你需要了解的内容。

每次调用创建方法时,返回的结果是一个刚创建的节点对象,所以你可以把这些节点存储在不同的变量里或者放到一个字典中,然后用它们来建立关系。如果你使用上面链接中的neo4j.Node(uri)语法,也可以从数据库中获取每个节点。创建关系时,create方法中的参数必须是节点对象,或者是同一次创建调用中创建的节点的索引(从0开始)。不过你不会用到索引的形式,所以你可以这样写:

codon_nodes = dict()

for i in codon_dict:
    codon_nodes[i] = gdb.create(({"aminoacid_name":i,"comprised_of":codon_dict[i]}))[0]

rel = gdb.create((codon_nodes['A'], 'is similar', codon_nodes['V']))

愿你平安,

Jim

撰写回答