una trigger transacciones saber registro quien log hacer datos contabilidad consultar como borro auditoria archivos sql django logging

trigger - Desactivar el registro de SQL mientras se mantiene la configuración



registro de transacciones contabilidad (4)

Cuando settings.DEBUG es True, Django usa CursorDebugWrapper en lugar de CursorWrapper. Esto es lo que agrega las consultas a connection.queries y consume memoria. Me gustaría aplicar un parche a la envoltura de conexión para usar siempre CursorWrapper:

from django.conf import settings from django.db.backends import BaseDatabaseWrapper from django.db.backends.util import CursorWrapper if settings.DEBUG: BaseDatabaseWrapper.make_debug_cursor = lambda self, cursor: CursorWrapper(cursor, self)

Deshabilitar el registro como otros sugieren no solucionará el problema, ya que CursorDebugWrapper aún almacena las consultas en connection.queries incluso si el registro está desactivado.

Django registra las operaciones de SQL en un búfer interno (ya sea que se registre en un archivo o no) cuando settings.DEBUG = True. Debido a que tengo un proceso de larga ejecución que realiza muchas operaciones de base de datos, esto hace que mis instancias en modo de desarrollo del programa crezcan en el consumo de memoria muy rápidamente.

Me gustaría deshabilitar el mecanismo de registro de SQL interno y dejar la configuración de.DEBUG activada para mi desarrollo: ¿es esto posible?

Django versión 1.3.0.


Esto funcionó para mí (al menos para Django 1.3.1):

from django.db import connection connection.use_debug_cursor = False

Encontré esa variable que inspecciona el código fuente de Django (no está documentado), las líneas relevantes se encuentran en django/db/backends/__init__.py (clase BaseDatabaseWrapper ):

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


Sí, puede silenciar el inicio de sesión de sql asignando un ''manejador nulo'' al registrador llamado ''django.db.backends''. Supongo que usas la nueva configuración de registro basada en dict de django ? Si es así, este fragmento debería facilitarlo:

... ''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'', }, ...

Actualización: mira la respuesta de Brian, también. Entendí que "registro" significa el registro irritante de cada declaración de SQL. Brian habla sobre el registro de memoria interna de cada consulta (y supongo que tiene razón :-)


Si todavía está interesado en rastrear las operaciones de SQL con fines de depuración, también puede limpiar la lista de conexiones.queries periódicamente para reclamar la memoria:

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 = []