【问题标题】:How to select count of second degree BackrefAccessor in Peewee?如何在 Peewee 中选择二级 BackrefAccessor 的计数?
【发布时间】:2018-03-05 20:43:04
【问题描述】:

我在我的 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_co_transactions 的用户获取所有user_transactions 吗?

【问题讨论】:

    标签: python mysql sql database peewee


    【解决方案1】:

    我认为这可以解决问题:

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

    解释:

    你想从用户事务表中选择,其中连接表的 count() 为 0。所以我们从用户事务表中选择,在协同事务表上连接(使用左外),并将聚合结果过滤为排除那些 cotxn != 0 的人。

    【讨论】:

    • 遗憾的是,这是回溯给我们留下的,但是是的,这是目前访问 complpex 回溯对象的官方文档正确方法(2019 年)--oof
    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2020-01-20
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多