sqlalchemy relational mapping
Hallo ich habe eine einfache Frage ich habe 2 Tabellen (Adressen und Benutzer - Benutzer hat eine Adresse, viele Nutzer Leben können, die unter der gleichen Adresse)... ich erstellte eine sqlalchemy Zuordnung wie dieses:
wenn ich meine Sitzung, und versuchen die Abfrage so etwas wie
class Person(object):
'''
classdocs
'''
idPerson = Column("idPerson", Integer, primary_key = True)
name = Column("name", String)
surname = Column("surname", String)
idAddress = Column("idAddress", Integer, ForeignKey("pAddress.idAddress"))
idState = Column("idState", Integer, ForeignKey("pState.idState"))
Address = relationship(Address, primaryjoin=idAddress==Address.idAddress)
class Address(object):
'''
Class to represent table address object
'''
idAddress = Column("idAddress", Integer, primary_key=True)
street = Column("street", String)
number = Column("number", Integer)
postcode = Column("postcode", Integer)
country = Column("country", String)
residents = relationship("Person",order_by="desc(Person.surname, Person.name)", primaryjoin="idAddress=Person.idPerson")
self.tablePerson = sqlalchemy.Table("pPerson", self.metadata, autoload=True)
sqlalchemy.orm.mapper(Person, self.tablePerson)
self.tableAddress = sqlalchemy.Table("pAddress", self.metadata, autoload=True)
sqlalchemy.orm.mapper(Address, self.tableAddress)
myaddress = session.query(Address).get(1);
print myaddress.residents[1].name
=> ich bekomme TypeError: 'RelationshipProperty' Objekt unterstützt keine Indizierung
Verstehe ich die Bewohner ist es um die Beziehung zu definieren, aber wie zum Teufel bekomme ich die Liste der Bewohner, dass die angegebene Adresse zugeordnet ist?!
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Definieren Sie eine Beziehung in einem falschen Ort. Ich denke, du vermischt Deklarative Erweiterung mit
non-declarative
verwenden:declarative
definieren Sie die Beziehungen in Ihremmodel
.model
zu einemtable
Wenn option-2 ist das, was Sie tun, dann müssen Sie entfernen Sie die beiden
relationship
Definitionen aus dermodels
, und fügen Sie es zu einem mapper (nur eine ist genug):Paar mehr Dinge über den obigen code:
primaryjoin
(solange Sie haben einen ForeignKey angegeben, und SA ist in der Lage zu schließen, die Spalten)order_by
Konfiguration ist nicht korrekt, siehe code oben für die version, die funktioniert.Könnten Sie versuchen, die Definition der Person nach der Adresse, mit backref zu - Adresse-diese wird erstellen Sie das array-element:
Dann können Sie Abfrage:
Weiter, wenn Sie eine Menge der Bewohner, die unter einer Adresse können Sie weitere filter-join: