Hi list, I wrote a proof of concept patch to add prepared statement support to Django for the PostgreSQL backend. Note that it's just a hack to see if this approach could work at all, I know it's badly written. :)
The patch is quite simple and so far has worked with all queries generated by Django, for a few different applications. It added a noticeable speed boost, though I haven't done any repeatable benchmarks. The main advantage is skipping redundant planning stages of similar queries -- especially for web pages which may involve complex queries -- many JOINs etc -- but only fetch a page of 25 rows. Here's the hack: https://bitbucket.org/intgr/django-queue/src/308dee4377c6/prepared_initial.patch Screenshot in action: http://ompldr.org/vODIzdQ/django_prepared.png Now I'm wondering how to approach a solution that would be mergeable into Django core. I get the impression that Django core developers have been opposed to built-in connection pooling. However, prepared statements are mostly useless without persistent connections. Is there any chance that prepared statements would be accepted into core or is this a show stopper? I'm willing to study Django's internals and take on a fair bit of work to implement this feature. What are the steps to get there? This is what I currently think needs to be done: 1. Implement some sort of persistent database connection 2. Add prepared statement support for PostgreSQL, default to on for persistent connections? 3. Except queries with LIKE, extra(), etc, that might not work well with prepared statements 4. Fix up CursorDebugWrapper to make prepared statements more transparent for the developer Some more ideas: * QuerySet method to force enable/disable preparing * QuerySet or Q attributes to force certain literals to be constants * Skip SQL building for prepared statements, by caching statements based on sql.Query attributes * Similar prepared statement support provided by MySQL Regards, Marti -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.
