SQLAlchemy中的多对多关系(关系exsist属性)

时间:2010-03-15 17:50:59

标签: python sqlalchemy pylons

我正在重新提出这个问题,但这一次采用了不同的框架。我有两个模型:用户和书籍与M2M关系。我希望Book有一个属性“read”,当关系存在时,该属性为True。这在SQLAlchemy中是否可行?

1 个答案:

答案 0 :(得分:1)

看看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语句中正确使用它:

if mybook.read:
    print 'very popular book indeed'

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

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