对sqlalchemy中的关系使用hybridattribute

时间:2018-07-18 07:57:10

标签: python sqlalchemy

我正在尝试使用以下虚构示例:

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。绝对是我猜到的恋爱问题。

0 个答案:

没有答案