多对多关系SQLAlchemy(是否存在关系属性)

2024-04-18 23:25:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我问这个问题,但这次的框架不同。我有两种型号:用户和书籍,有M2M关系。我希望书有一个属性“read”,当关系存在时,该属性是真的。这在SQLAlchemy中可能吗?


Tags: 用户框架read属性sqlalchemy关系书籍m2m
1条回答
网友
1楼 · 发布于 2024-04-18 23:25:43

看看SQL Expressions as Mapped Attributes。像这样的东西应该对你有用:

Book.read = column_property(
        select(
            [func.count(user_to_book_table.c.user_id)],
            user_to_book_table.c.book_id == book_table.c.id
        ).label('read')
    )

即使它不是布尔值,您仍然可以在IF语句中正确使用它:

^{pr2}$

或者,您可以在Book对象上添加一个计算的(只读)属性,但这会将所有用户加载到会话中:

@property
def read(self):
    return len(self.books)!=0

相关问题 更多 >