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