gpt4 book ai didi

python - py2neo ogm 与多个节点标签的关系

转载 作者:行者123 更新时间:2023-11-30 22:50:34 35 4
gpt4 key购买 nike

我想使用 py2neo 的 OGM 来表示从一种节点类型到两种节点类型的关系。

我有一个解决方案(如下),仅适用于在数据库中存储节点/关系,并且我找不到在检索关系时正常工作的解决方案。

这是我的例子。考虑人与汽车之间的关系:

from py2neo.ogm import GraphObject, Property, RelatedTo
from py2neo import Graph

class Person(GraphObject):
name = Property()
Owns = RelatedTo("Car")

class Car(GraphObject):
model = Property()

g = Graph(host="localhost", user="neo4j", password="neo4j")

# Create Pete
p = Person()
p.name = "Pete"

# Create Ferrari
c = Car()
c.model = "Ferrari"

# Pete OWNS Ferrari
p.Owns.add(c)

# Store
g.push(p)

这工作得很好。现在,我们假设一个人也拥有一所房子(此代码继续上面的代码):

class House(GraphObject):
city = Property()

# Create House
h = House()
h.city = "New York"

# Pete OWNS House in New York
p.Owns.add(h)

# Update
g.push(p)

关系 OWNS 的“to”端应该指向汽车,而不是房屋。但显然 py2neo 并不太关心,它按照预期将所有内容存储在数据库中:通过 OWNS 关系连接的人、汽车和房屋。

现在的问题是使用上面的类来检索节点和关系。虽然节点属性已正确加载,但关系却未正确加载:

p = Person.select(g).where(name="Pete").first()
for n in list(p.Owns):
print type(n).__name__

这会导致:

Car
Car

此行为与类对象一致。

如何在 py2neo.ogm 中为同一类的“Person OWNS Car”和“Person OWNS House”建模?我可以在这里使用任何已知的解决方案或解决方法吗?

最佳答案

问题在于“Owns”被设置为与“Car”节点的关系。您需要建立另一种关系才能拥有房子。如果您希望该关系在 Neo4j 中具有“OWNS”标签,则需要填充RelatedTo 函数的第二个变量。 Py2Neo 文档 ( http://py2neo.org/v3/ ) 第 3 章对此进行了介绍。

class Person(GraphObject):
name = Property()

OwnsCar = RelatedTo("Car", "OWNS")
OwnsHouse = RelatedTo("House" "OWNS")

class Car(GraphObject):
model = Property()

class House(GraphObject):
city = Property()

我确实想说,Rick 的回答解决了我试图通过使用 Py2Neo OGM 进行标签来解决的问题。所以谢谢里克!

关于python - py2neo ogm 与多个节点标签的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39292197/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com