25👍
When settings.DEBUG is True, Django uses CursorDebugWrapper instead of CursorWrapper. This is what appends the queries to connection.queries and consumes memory. I would monkey-patch the connection wrapper to always use CursorWrapper:
from django.conf import settings
from django.db.backends.base.base import BaseDatabaseWrapper
from django.db.backends.utils import CursorWrapper
if settings.DEBUG:
BaseDatabaseWrapper.make_debug_cursor = lambda self, cursor: CursorWrapper(cursor, self)
Place this in some file that gets imported early in your application.
Disabling logging like others suggest won’t fix the problem, because CursorDebugWrapper still stores the queries in connection.queries even if logging is off.
45👍
Yes, you can quiet the sql logging down by assigning a ‘null handler’ to the logger named ‘django.db.backends’. I assume you use django’s new dict-based logging setup? If so, this snippet ought to make it easy:
...
'handlers': {
'null': {
'level': 'DEBUG',
'class':'logging.NullHandler',
},
...
'loggers': {
... your regular logger 'root' or '' ....
'django.db.backends': {
'handlers': ['null'], # Quiet by default!
'propagate': False,
'level':'DEBUG',
},
...
Update: look at Brian’s answer, too. I understood “logging” to mean the irritating logging of every sql statement. Brian talks about the internal memory logging of every query (and I guess he’s right 🙂
- [Django]-How to chcek if a variable is "False" in Django templates?
- [Django]-Django query filter with variable column
- [Django]-Case insensitive urls for Django?
5👍
This worked for me (at least for Django 1.3.1):
from django.db import connection
connection.use_debug_cursor = False
I’ve found that variable inspecting Django source code (it is not documented), the relevant lines are found in django/db/backends/__init__.py
(BaseDatabaseWrapper
class):
def cursor(self):
if (self.use_debug_cursor or
(self.use_debug_cursor is None and settings.DEBUG)):
cursor = self.make_debug_cursor(self._cursor())
else:
cursor = util.CursorWrapper(self._cursor(), self)
return cursor
- [Django]-How to clear form fields after a submit in Django
- [Django]-Django ModelForm override widget
- [Django]-Can I make list_filter in django admin to only show referenced ForeignKeys?
3👍
If still interested in tracing SQL operations for debugging purposes, you can also clean connection.queries list periodically to reclaim memory:
from django.db import connection
for i in range(start, count, size):
objects = MyModel.objects.order_by('pk').all()[i:i + size]
...
print connection.queries
connection.queries = []
- [Django]-Django – filtering on foreign key properties
- [Django]-Django prefetch_related id only
- [Django]-Change Django Templates Based on User-Agent
0👍
Django 3.0.7
Change
def queries_logged(self):
self.force_debug_cursor or settings.DEBUG
to
def queries_logged(self):
return False
in django/db/backends/base/db.py
- [Django]-Django: Model Form "object has no attribute 'cleaned_data'"
- [Django]-Database returned an invalid value in QuerySet.dates()
- [Django]-LEFT JOIN Django ORM