2016-09-19 4 views
0

Ich habe zwei Knoten A und B. Sie haben eine gerichtete Beziehung von A zu B.ObjectModel Zugriff auf eingehende Beziehungen

Somit hat A eine zugeschrieben Typ RelatedTo. Ich möchte jedoch über alle B Knoten iterieren und auf die eingehenden Beziehungen von A zugreifen.

Wie kann ich das tun?

Ich versuchte, ein ConnectedTo Attribut des Typs Hinzufügen RelatedFrom-B aber wenn das Diagramm ich ein ValueError('Invalid Identifier') erhalten abfragt.

class A(GraphObject): 

    __primarykey__ = "hash" 

    hash = Property() 

    ConnectedTo = RelatedTo('B') 

    def __init__(self, hash): 
     self.hash = hash 


class B(GraphObject): 

    __primarykey__ = "hash" 

    hash = Property() 

    ConnectedTo = RelatedFrom('A') 

    def __init__(self, hash): 
     self.hash = hash 


>>> a = A("testA") 
>>> b = B("testB") 
>>> a.ConnectedTo.add(b) 
>>> graph.push(a) 
>>> graph.push(b) 
>>> test = B.select(graph).first() 

Ergebnisse in Fehler:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/py2neo/ogm.py", line 442, in first 
    return self._object_class.wrap(super(GraphObjectSelection, self).first()) 
    File "/usr/local/lib/python2.7/dist-packages/py2neo/ogm.py", line 344, in wrap 
    _ = getattr(inst, attr) 
    File "/usr/local/lib/python2.7/dist-packages/py2neo/ogm.py", line 90, in __get__ 
    related[key] = RelatedObjects(cog.node, self.direction, self.relationship_type, self.related_class) 
    File "/usr/local/lib/python2.7/dist-packages/py2neo/ogm.py", line 135, in __init__ 
    self.__relationship_pattern = "(a)<-[_:%s]-(b)" % cypher_escape(relationship_type) 
    File "/usr/local/lib/python2.7/dist-packages/py2neo/database/cypher.py", line 221, in cypher_escape 
    writer.write_identifier(identifier) 
    File "/usr/local/lib/python2.7/dist-packages/py2neo/database/cypher.py", line 78, in write_identifier 
    raise ValueError("Invalid identifier") 
ValueError: Invalid identifier 

Antwort

1

Die Lösung war leichter als erwartet:

class TestA(GraphObject): 
    __primarykey__ = "hash" 
    hash = Property() 
    CONNECTEDTO = RelatedTo('TestB') 
    def __init__(self, hash): 
     self.hash = hash 
class TestB(GraphObject): 
    __primarykey__ = "hash" 
    hash = Property() 
    CONNECTEDTO = RelatedFrom('TestA', "CONNECTEDTO") 
    def __init__(self, hash): 
     self.hash = hash 

>>> a = A("testA") 
>>> b = B("testB") 
>>> a.ConnectedTo.add(b) 
>>> graph.push(a) 
>>> graph.push(b) 
>>> test = B.select(graph).first() 
>>> list(test.CONNECTEDTO) 
[ TestA ] 

Der wichtigste Teil ist RelatedFrom('TestA','CONNECTEDTO'). Sie müssen angeben, wie die eingehende Verbindung aufgerufen wird.

Verwandte Themen