Abd*_*mid 5 python sqlalchemy flask-sqlalchemy
你好我试图用sqlalchemy实现这个原始查询:
SELECT m.*, SUM(case when f.monkey = m.id then 1 else 0 end) as friends
FROM monkey as m
LEFT JOIN friendship as f ON m.id = f.monkey
GROUP BY m.id, m.name
order by friends desc
Run Code Online (Sandbox Code Playgroud)
到目前为止,我得到了我想要的结果这个原始查询,但我希望能够.paginate他们所以我可以继续正常工作
我的其他问题是我做的是这样的:
monkeys = models.Monkey.query.order_by(models.Monkey.name).paginate(page, 5, False)
Run Code Online (Sandbox Code Playgroud)
相当简单,我得到了我想要的东西,我相信我必须做的事情
monkeys = models.Monkey.query.join(models.Friendship, db.func.count(models.Monkey.id == models.Friendship.monkey))
Run Code Online (Sandbox Code Playgroud)
但我没有得到我想要的,我知道我错过了sum()部分,但我尝试使用func.c.count(),但我只是不知道如何让它工作,是否可以在sqlalchemy实现这一点?即时通讯使用postgres btw
看起来这将完成你所需要的
monkeys = models.Monkey.query.outerjoin(models.Friendship, db.func.count(models.Monkey.id == models.Friendship.monkey))
#or if you really want to stick to your above query
monkeys = models.Monkey.query.outerjoin(models.Friendship, db.func.SUM(func.IF(models.Monkey.id == models.Friendship.monkey, 1, 0)))
Run Code Online (Sandbox Code Playgroud)
仅供参考,我习惯在 mysql 中执行此操作,您所说的 func.* 略有不同
归档时间: |
|
查看次数: |
429 次 |
最近记录: |