python - 从原始 sql 到 flask-sqlalchemy

标签 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

到目前为止,我通过这个原始查询得到了我想要的结果,但我希望能够对它们进行分页,以便我可以继续正常工作

对于我的其他查询,我所做的是:

monkeys = models.Monkey.query.order_by(models.Monkey.name).paginate(page, 5, False)

相当简单,我得到了我想要的,我相信我必须做类似的事情

monkeys = models.Monkey.query.join(models.Friendship, db.func.count(models.Monkey.id == models.Friendship.monkey))

但我没有得到我想要的,我知道我缺少 sum() 部分但我尝试使用 func.c.count() 但我只是不知道如何让它工作,是否可以在 sqlalchemy 中实现它?我正在使用 postgres 顺便说一句

最佳答案

看起来这会完成你所需要的

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)))

仅供引用,我习惯在 mysql 中执行此操作,func.* 你称我为略有不同

关于python - 从原始 sql 到 flask-sqlalchemy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30929013/

相关文章:

python - 为什么 Python 中没有 Inf、-Inf 和 NaN 关键字?

python - 无法导入使用 SWIG 创建的模块

python - SQLAlchemy _asdict() 方法仅返回一列

python - 邻接表的错误在哪里?

python - 使用 SQLAlchemy 使用 SQL 表本身的数据更新 SQL 表

python - 如何使用metadata.create_all(..) 创建(在Flask 中使用flask-SA 等)SQLite DB 文件

python - 重写 set 的派生类的 len 函数

python - 从数据框中的字符串中删除字符

python-3.x - Flask-SQLAlchemy:自动过滤 'deleted' 条目

python - sqlAlchemy 中的求和字段