py2neoのOGMを使用して、1つのノードタイプから2つのノードタイプへの関係を表現したいと思います。py2neo ogm複数ノードラベルとの関係
私はDB内のノード/リレーションシップを格納するためのソリューション(下記)があり、リレーションシップを取得するときに正しく動作するソリューションを見つけることができませんでした。
これは私の例です。人から車までの関係を考えてみましょう。
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)
これはうまく機能します。さて、(このコードは上記1から続く)人が同様に家を所有していると仮定しましょう:
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)
は関係の終わりは車ではなく、家を指すようになっている所有「すること」。しかし、明らかにpy2neoはそれほど気にせず、OWNSの関係を介して接続されたPerson、Car、HouseというDBにすべてを格納します。
問題は、上記のクラスを使用してノードとリレーションシップを取得することです。ノードのプロパティが正しくロードされているが、関係はありません。
Car
Car
この動作は、クラスオブジェクトと一致している:これは、その結果
p = Person.select(g).where(name="Pete").first()
for n in list(p.Owns):
print type(n).__name__
。
py2neo.ogmに同じクラスの「Person OWNS Car」と「Person OWNS House」をどのようにモデル化できますか?ここで使用できる既知の解決策または回避策はありますか?
strange。私は私のシステムで同じシナリオを複製しました。しかし、私にとっては、「車」の1行だけが印刷されました。 – dunder
py2neo 3.1.1でもう一度チェックして、出力は元の質問と同じです。おそらく別のpy2neoバージョンですか?それでも、ここで私が指摘するのは、「カーハウス」の成果を達成したいということです。 –