2015-06-19 20 views
5

cześć im stara się osiągnąć ten surowy kwerendy z SQLAlchemy:z surowego SQL do kolby-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 

tej pory dostaję wynik chcę z tego surowego kwerendy, ale chcę, aby móc je .paginate więc mogę nadal pracować prawidłowo

z moich innych pytań, co zrobiłem było tak:

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

dość prosty i mam co chciałem, belive muszę zrobić coś takiego

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

ale nie dostaję tego, co chcę, wiem, że brakuje mi części sum(), ale próbowałem z func.c.count(), ale ja po prostu nie wiem jak to działa, czy jest to możliwe do osiągnięcia to w sqlalchemy? im przy postgres btw

Odpowiedz

0

Wygląda to będzie osiągnąć to, czego potrzebujesz

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

FYI jestem przyzwyczajony do robienia tego w mysql, FUNC. * zadzwonić mój być nieco inna

+0

Właściwie to robi , od kiedy poprosiłem, że zrobiłem badania i nie miałem func.IF w sposób, w jaki zrobiłeś, dziękuję! – AbdulHamid

Powiązane problemy