python - 如何在 Peewee 中选择二度 BackrefAccessor 的计数?

标签 python mysql sql database peewee

我在我的 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 吗?

最佳答案

我认为这可以解决问题:

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

解释:

你想从join表的count()为0的user transaction表中select,所以我们从user transaction表中select,在cotransaction表上join(使用left outer),过滤聚合结果为排除那些计数为 cotxn != 0 的。

关于python - 如何在 Peewee 中选择二度 BackrefAccessor 的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49119128/

相关文章:

php - 我从数据库中提取的图像有时不会在浏览器中显示,但如果我查看源代码,它们就会显示

mysql - 500万行表中最长前缀匹配的最佳MYSQL查询

sql - MySQL 统计匹配单词数

python - 在 pytorch 中计算 `loss.backward` 的多重损失性能吗?

python - pyOpenGL纹理不渲染

MySQL IN 子句 : max number of arguments

sql - SQL 中四舍五入到小数点后两位

php - 如何在 LIMIT 子句中应用 bindValue 方法?

python - 如何让 Django 中的应用程序知道登录过程已经完成?

带有 ajax 的 python+gae 兼容的 web ui 工具包但是当没有 js 时优雅地降级?