Ik was bezig aan iets in Django. Dat doet in principe allemaal mooie dingen op hoog niveau en een mens moet zijn poten niet vuilmaken aan de database, een groot gemak mijnheer mevrouw.
Maar op een bepaald punt loopt het in de soep met de snelheid en de efficiëntie, en op een bepaald moment lukt het gewoon niet om een view samen te stellen met combinaties van .filter() en .exclude() en subqueries in allerlei stappen en dan gedoe met {% for %}-dingen in elkaar genest en groupers en gedoe op een template-pagina: ja, het werkt min of meer wel, maar het is oérend traag. En véél te complex.
En dan geeft een mens het op, en wordt het gewoon
lijst = Dingen.objects.raw("""
SELECT p.id, p.veld1, p.veld2,
r.veld1, r.veld2, a.veld2, c.veld1
FROM tabel1 p
inner join tabel2 r on p.r_id=r.id
inner join tabel3 b on p.id=b.p_id
left outer join tabel4 a on p.id=a.p_id
left outer join tabel5 c on p.id=c.p_id
WHERE
r.veld1< {0} and b.veld1 in ({1}) and
p.veld3=0 and p.veld4=1 and
(a.veld3=1 or a.id is null) and
(c.ctype='blah' or c.id is null) and
p.id not in (select p_id from tabel4
where veld1={0} or s_id=2)
GROUP BY p.id
ORDER BY r.veld1, r.veld2, p.veld2
""".format(parameter1,parameter2))
Jaja, ’t is niet zoals het zou moeten zijn, maar het is maar voor een rapport dat zeer zeer zelden moet lopen, en doet zó een deugd om in de rapte wat SQL bij elkaar te schrijven en dat het allemaal wérkt.
Ik krijg er bijna heimwee naar echt programmeren en echt databasegedoe door.











