我正在尝试使用以下虚构示例:
class Person(Base):
__tablename__ = "persons"
__table_args__ = {"mysql_charset": "utf8mb4"}
id = Column(Integer, primary_key=True)
name = Column(String(50), index=True, unique=True)
birthday = Column(Boolean, default=False)
@hybrid_property
def is_birthday_person(self):
return self.birthday == True
class Party(Base):
__tablename__ = "parties"
__table_args__ = {"mysql_charset": "utf8mb4"}
id = Column(BigInteger, primary_key=True)
one_id = Column(Integer, ForeignKey("persons.id"))
two_id = Column(Integer, ForeignKey("persons.id"))
one_person = relationship("Person", foreign_keys=[one_id])
two_person = relationship("Person", foreign_keys=[two_id])
sunshine = Column(Boolean, default=False)
@hybrid_property
def everyones_birthday_in_sunshine(self):
return self.one_person.is_birthday_person and self.two_person.is_birthday_person and self.sunshine
我要实现的目的是过滤所有参与者,并且仅当我运行以下查询时,在两个人都庆祝生日并且阳光明媚的情况下返回参与者:
session.Query(Party).filter(Party.everyones_birthday_in_sunshine).all()
我得到的错误是:
AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with Party.one_person has an attribute 'is_birthday_person'
当我将everyones_birthday_in_sunshine
更改为:
return self.sunshine == True
它起作用并返回我跑步时阳光照耀的各方:
session.Query(Party).filter(Party.everyones_birthday_in_sunshine).all()
所以问题出在党与人之间的关系上,但是我不知道如何使它起作用。
编辑:
当我尝试从Party:everyones_birthday_in_sunshine
中的person实例打印属性时,例如:one_person.name
,它只是打印出Party.one_person
。绝对是我猜到的恋爱问题。