CARVIEW |
Select Language
HTTP/2 200
date: Tue, 29 Jul 2025 06:29:59 GMT
content-type: text/html; charset=utf-8
cache-control: max-age=0, private, must-revalidate
cf-cache-status: DYNAMIC
link: ; rel=preload; as=style; nopush,; rel=preload; as=script; nopush,; rel=preload; as=style; nopush,; rel=preload; as=script; nopush,; rel=preload; as=script; nopush
nel: {"report_to":"heroku-nel","response_headers":["Via"],"max_age":3600,"success_fraction":0.01,"failure_fraction":0.1}
referrer-policy: strict-origin-when-cross-origin
report-to: {"group":"heroku-nel","endpoints":[{"url":"https://nel.heroku.com/reports?s=kfzQF9q4opUqa9DMv%2F0qz6AyVmRY244ar%2FqSWVFQ14w%3D\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\u0026ts=1753770599"}],"max_age":3600}
reporting-endpoints: heroku-nel="https://nel.heroku.com/reports?s=kfzQF9q4opUqa9DMv%2F0qz6AyVmRY244ar%2FqSWVFQ14w%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1753770599"
server: cloudflare
strict-transport-security: max-age=0; includeSubDomains
vary: Accept,Accept-Encoding
via: 2.0 heroku-router
x-content-type-options: nosniff
x-permitted-cross-domain-policies: none
x-request-id: 25472646-b847-9f33-ca8a-b8746674389c
x-runtime: 0.160579
x-xss-protection: 0
content-encoding: gzip
set-cookie: _secure_speakerd_session=T7RKqp%2BsbgHErBTTeKYfqj1LNNHq%2FjioWm3mITwDRVz%2B4tgQqH2IUE4U7t8vsFFk5ZAzGnY%2FymF2xJ%2Fyx0t0joD34dLc02qe%2BS0EUWLRnnTLb5XLwTTr2ohe1z34u0p5UDJ929jueMQPw56XvRE%2BzHXa49h0xAlHKM%2Fzau%2F6CzPPlfrlSqZ9I6shXqoCUpWS3%2FU9cIyGEDjJ6nDYkRkavZbkcsnwGYG6Qa3L6EXt5im71qgff%2Fo6g4Xv5ZnjCuB12prS6IsyqdcyS7DNcsG0KIzJiZ2er9lXRlJkCUkI1UUU7ejzHl1DOjPOgYqHfaTPUlu0nAE6a%2FHlVvZURt%2FZFEweGgaN3RDeHWtb%2FBNoh1XNToktfcNTaUDer%2B0zCoiFAw2TIYWOUch3%2BbHKaBoWkV6B--LcfV9HjNnUVv%2BpRO--TaslYqYEeTH3f1Idb8bN3w%3D%3D; HttpOnly; SameSite=Lax; Secure; Path=/; Expires=Tue, 12 Aug 2025 06:29:59 GMT
cf-ray: 966a90a32eb43b9d-BOM
Why I Hate the Django ORM - Speaker Deck
More Decks by Alex Gaynor
Other Decks in Programming
Featured
Transcript
-
I ALSO HELP BUILD IT (SO ALL OF THIS STUFF
IS REALLY MY FAULT) Thursday, January 12, 2012 -
SELECT event_type SUM(end_time - start_time) FROM event GROUP BY event_type
Thursday, January 12, 2012 -
WHY DO WE HAVE AN ORM? DATABASE RECORDS INTO OBJECTS
EXECUTE COMMON QUERIES NOT REPLACE SQL Thursday, January 12, 2012 -
IT HAS A SYNTAX Event.objects.values( “event_type” ).annotate( Sum(F(“end_time”) - F(“start_time”))
) Thursday, January 12, 2012 -
Traceback (most recent call last): File "<input>", line 1, in
<module> File ".../query.py", line 741, in annotate is_summary=False) File ".../sql/query.py", line 990, in add_aggregate field_list = aggregate.lookup.split(LOOKUP_SEP) AttributeError: 'ExpressionNode' object has no attribute 'split' FFFFFFFUUUUUUUUUUUU Thursday, January 12, 2012 -
WEREN’T DESIGNED WITH EACH OTHER IN MIND MUCH LESS A
COMPREHENSIVE SYSTEM Thursday, January 12, 2012 -
NOTICE THAT? SQLALCHEMY USES THE SAME SYNTAX FOR FIELDS, EVERYWHERE
Thursday, January 12, 2012 -
STRINGS, KEYWORD ARGUMENTS, AND FUNKY ONE-LETTER OBJECTS (WITH VARYING LEVELS
OF INTEROPERABILITY) Thursday, January 12, 2012 -
WHEN DO YOU USE WHICH? I HAVE NO IDEA (AND
I WROTE THE DAMNED THING) Thursday, January 12, 2012 -
SIMPLE THINGS ARE SIMPLE MEDIUM THINGS ARE POSSIBLE HARD THINGS
AREN’T Thursday, January 12, 2012 -
SIMPLE THINGS SHOULD BE SIMPLE HARD THINGS SHOULD BE POSSIBLE
Thursday, January 12, 2012 -
THE IDEALS OF THE ORM ARE GOOD THE API IS
GREAT FOR SIMPLE CASES Thursday, January 12, 2012 -
BUT THE INCONSISTENCIES BLEED AND THINGS THAT SHOULD BE EASY
AREN’T Thursday, January 12, 2012