mirror of https://github.com/django/django.git
Clarified QuerySet.iterator()'s docs on server-side cursors.
This commit is contained in:
parent
9af6c97504
commit
bf50ae8210
|
@ -43,11 +43,12 @@ div.nav { margin: 0; font-size: 11px; text-align: right; color: #487858;}
|
|||
|
||||
/*** basic styles ***/
|
||||
dd { margin-left:15px; }
|
||||
h1,h2,h3,h4 { margin-top:1em; font-family:"Trebuchet MS",sans-serif; font-weight:normal; }
|
||||
h1,h2,h3,h4,h5 { margin-top:1em; font-family:"Trebuchet MS",sans-serif; font-weight:normal; }
|
||||
h1 { font-size:218%; margin-top:0.6em; margin-bottom:.4em; line-height:1.1em; }
|
||||
h2 { font-size:175%; margin-bottom:.6em; line-height:1.2em; color:#092e20; }
|
||||
h3 { font-size:150%; font-weight:bold; margin-bottom:.2em; color:#487858; }
|
||||
h4 { font-size:125%; font-weight:bold; margin-top:1.5em; margin-bottom:3px; }
|
||||
h5 { font-size:110%; font-weight:bold; margin-top:1em; margin-bottom:3px; }
|
||||
div.figure { text-align: center; }
|
||||
div.figure p.caption { font-size:1em; margin-top:0; margin-bottom:1.5em; color: #555;}
|
||||
hr { color:#ccc; background-color:#ccc; height:1px; border:0; }
|
||||
|
|
|
@ -2021,15 +2021,32 @@ evaluated will force it to evaluate again, repeating the query.
|
|||
Also, use of ``iterator()`` causes previous ``prefetch_related()`` calls to be
|
||||
ignored since these two optimizations do not make sense together.
|
||||
|
||||
Some Python database drivers still load the entire result set into memory, but
|
||||
won't cache results after iterating over them. Oracle and :ref:`PostgreSQL
|
||||
<postgresql-server-side-cursors>` use server-side cursors to stream results
|
||||
from the database without loading the entire result set into memory.
|
||||
Depending on the database backend, query results will either be loaded all at
|
||||
once or streamed from the database using server-side cursors.
|
||||
|
||||
With server-side cursors
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Oracle and :ref:`PostgreSQL <postgresql-server-side-cursors>` use server-side
|
||||
cursors to stream results from the database without loading the entire result
|
||||
set into memory.
|
||||
|
||||
The Oracle database driver always uses server-side cursors.
|
||||
|
||||
On PostgreSQL, server-side cursors will only be used when the
|
||||
:setting:`DISABLE_SERVER_SIDE_CURSORS <DATABASE-DISABLE_SERVER_SIDE_CURSORS>`
|
||||
setting is ``False``. Read :ref:`transaction-pooling-server-side-cursors` if
|
||||
you're using a connection pooler configured in transaction pooling mode.
|
||||
you're using a connection pooler configured in transaction pooling mode. When
|
||||
server-side cursors are disabled, the behavior is the same as databases that
|
||||
don't support server-side cursors.
|
||||
|
||||
Without server-side cursors
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
MySQL and SQLite don't support streaming results, hence the Python database
|
||||
drivers load the entire result set into memory. The result set is then
|
||||
transformed into Python row objects by the database adapter using the
|
||||
``fetchmany()`` method defined in :pep:`249`.
|
||||
|
||||
.. versionchanged:: 1.11
|
||||
|
||||
|
|
Loading…
Reference in New Issue