Я не понимаю, как сделать запрос.У меня есть следующее объявление
class GrandParent(Base):
__tablename__ = "grandparent"
id = Column(Integer, primary_key=True)
name = Column(String(16))
# One-to-one relationship
parent_id = Column(Integer, ForeignKey('parent.id'))
parent = relationship("Parent", backref=backref("grandparent", uselist=False))
def __init__(self, name):
self.name = name
class Parent(Base):
__tablename__ = "parent"
id = Column(Integer, primary_key=True)
name = Column(String(16))
# One-to-many relationship
children = relationship("Child", backref="parent")
def __init__(self, name):
self.name = name
class Child(Base):
__tablename__ = "child"
id = Column(Integer, primary_key=True)
name = Column(String(16))
index = Column(Integer)
parent_id = Column(Integer, ForeignKey('parent.id'))
def __init__(self, name, idx):
self.name = name
self.index = idx
def __repr__(self):
return self.name
Что я хотел бы сделать, это запросить объект Child
, зная его index
и GrandParent.id
.Я знаю, что этот запрос не работает, но только для иллюстрации того, что я ищу:
c = session.query(Child).filter(Child.parent.grandparent.id == 2 and Child.index == 3).first()
AttributeError: Ни у объекта «InstrumentedAttribute», ни у объекта «Comparator», связанного с Child.parent, нет атрибута'grandparent'
Однако это работает:
grandparent = GrandParent('dad')
grandparent.parent = Parent('bob')
grandparent.parent.children.append(Child('alice', 1))
grandparent.parent.children.append(Child('jo', 2))
grandparent.parent.children.append(Child('blo', 3))
foo = Child('foo', 4)
grandparent.parent.children.append(foo)
session.add(grandparent)
print(foo.grandparent.parent.id)