如何在Peewee中选择二度BackrefAccessor的数量?

问题描述 投票:2回答:1

我在我的Flask应用程序中使用(优秀的)Python Peewee ORM。我有以下型号(简化):

class User(BaseModel):
    name = TextField(null=True)

class UserTransaction(BaseModel):
    user = ForeignKeyField(User, related_name='user_transactions')
    amount = DecimalField(default=0)

class UserCoTransaction(BaseModel):
    user_transaction = ForeignKeyField(UserTransaction, related_name='user_co_transactions')

我现在选择了如下用户:

user = User.select().where(User.id == 3).first()

对于这个用户,我想得到所有user_transactions,没有user_co_transaction。我尝试了以下方法:

user.user_transactions.where(UserTransaction.user_co_transactions.count() == 0)

但这给了我一个AttributeError: 'BackrefAccessor' object has no attribute 'count'

有没有人知道如何为没有user_transactions的用户提供所有user_co_transactions

python mysql sql database peewee
1个回答
1
投票

我认为这可能会成功:

(UserTransaction
 .select()
 .where(UserTransaction.user == user)
 .join(UserCoTransaction, JOIN.LEFT_OUTER)
 .group_by(UserTransaction)
 .having(fn.COUNT(UserCoTransaction.id) == 0))

说明:

您希望从连接表的count()为0的用户事务表中进行选择。因此,我们从用户事务表中选择,在cotransaction表上连接(使用left outer),并过滤聚合结果以排除那些cotxn的数量!= 0。

© www.soinside.com 2019 - 2024. All rights reserved.