Je travaille sur un projet django-postgresql et j'ai besoin de voir toutes les requêtes que django exécute sur la base de données (donc je peux affiner les requêtes). Existe-t-il un moyen d'obtenir ces requêtes? Mise à jour: Mon environnement de développement est sur Linux UbuntuObtenir toutes les requêtes exécutées par django sur postgresql
Répondre
Essayez le django debug toolbar. Il va vous montrer tout le SQL exécuté sur la demande. Quand quelque chose exécute beaucoup trop de requêtes, cela devient vraiment lent, cependant. Pour cela, je voulais essayer ce profiler. Cependant, j'ai roulé ce middleware sur deux projets:
try:
from cStringIO import StringIO
except ImportError:
import StringIO
from django.conf import settings
from django.db import connection
class DatabaseProfilerMiddleware(object):
def can(self, request):
return settings.DEBUG and 'dbprof' in request.GET
def process_response(self, request, response):
if self.can(request):
out = StringIO()
out.write('time sql\n')
total_time = 0
for query in reversed(sorted(connection.queries, key=lambda x: x['time'])):
total_time += float(query['time'])*1000
out.write('%s %s\n' % (query['time'], query['sql']))
response.content = '<pre style="white-space:pre-wrap">%d queries executed in %.3f seconds\n%s</pre>' \
% (len(connection.queries), total_time/1000, out.getvalue())
return response
Il suffit d'aller à l'URL correspondant à la demande qui vous intéresse et ajouter un paramètre dbprof
GET
, vous verrez la sortie de profilage au lieu de la réponse normale.
Eh bien, vous pouvez simplement définir le serveur pgsql pour consigner chaque requête. Ou juste pour enregistrer les plus lents. Regardez dans le fichier postgresql.conf, c'est assez proche de l'auto-documentation.
Vérifiez cette question (et les deux les plus haut réponses): django orm, how to view (or log) the executed query?
Vous pouvez également jeter un oeil à la Documenation Djando: https://docs.djangoproject.com/en/dev/faq/models/#how-can-i-see-the-raw-sql-queries-django-is-running
Hope this helps, Anton
Vous pouvez décorer un gestionnaire de requête ou une autre fonction avec ceci et il imprimera le sql bien formé avec les totaux à la fin.
from functools import wraps
from django.utils import termcolors
format_ok = termcolors.make_style(opts=('bold',), fg='green')
format_warning = termcolors.make_style(opts=('bold',), fg='yellow')
format_error = termcolors.make_style(opts=('bold',), fg='red')
try:
from pygments import highlight
from pygments.lexers import SqlLexer
from pygments.formatters import TerminalFormatter
pygments_sql_lexer = SqlLexer()
pygments_terminal_formatter = TerminalFormatter()
highlight_sql = lambda s: highlight(s, pygments_sql_lexer,
pygments_terminal_formatter)
except ImportError:
highlight_sql = lambda s: s
def debug_sql(f):
"""
Turn SQL statement debugging on for a test run.
"""
@wraps(f)
def wrapper(*a, **kw):
from django.conf import settings
from django.db import connection
try:
debug = settings.DEBUG
settings.DEBUG = True
connection.queries = []
return f(*a, **kw)
finally:
total_time = 0
for q in connection.queries:
fmt = format_ok
t = float(q['time'])
total_time += t
if t > 1:
fmt = format_error
elif t > 0.3:
fmt = format_warning
print '[%s] %s' % (fmt(q['time']), highlight_sql(q['sql']))
print "total time =", total_time
print "num queries =", len(connection.queries)
settings.DEBUG = debug
return wrapper
- 1. Comment enregistrer les requêtes PostgreSQL?
- 2. Django PostgreSQL - Supprimer toutes les tables?
- 3. Comment puis-je regarder les requêtes exécutées?
- 4. Journal des requêtes exécutées sur SQL Server
- 5. Comment enregistrer toutes les commandes exécutées par system() Appel système
- 6. Comment puis-je voir les requêtes exécutées sur Oracle?
- 7. Nombre de requêtes exécutées par NHibernate dans un test unitaire
- 8. Dans quelle séquence les requêtes et sous-requêtes sont-elles exécutées par le moteur SQL?
- 9. Nombre de requêtes MySQL exécutées sur la page
- 10. Comment imprimer toutes les requêtes dans Magento?
- 11. Existe-t-il un moyen de suivre toutes les requêtes qui ont été exécutées par le serveur?
- 12. Comment afficher les requêtes SQL exécutées dans la console Rails?
- 13. Toutes les méthodes d'une expression logique seront-elles exécutées?
- 14. Django ORM interprète les séquences PostgreSQL?
- 15. Obtenir toutes les adresses IPv6 sur toutes les interfaces (Windows)
- 16. Django/GAE: Comment filtrer les requêtes sur foreignkey?
- 17. Comment chronométrer les requêtes Django
- 18. Django dynamic OU requêtes
- 19. Obtenir la liste de toutes les fonctions exécutées comme la pile d'appel dans asp.net
- 20. Lister toutes les tables dans postgresql information_schema
- 21. requêtes dans django
- 22. Rediriger toutes les requêtes vers ASP.NET MVC sur IIS6
- 23. Django: Comment obtenir toutes les tables et toutes les colonnes de cette table dans un projet?
- 24. Toutes les pages d'une application ASP.Net sont-elles exécutées dans le même domaine d'application?
- 25. Comment trouver toutes les commandes exécutées sur une base de données MySQL dans un délai donné?
- 26. Abandonner globalement toutes les requêtes jQuery AJAX
- 27. Enregistrer toutes les requêtes dans mysql
- 28. Comment imprimer les instructions mysql exécutées/à exécuter sur une instruction dans django?
- 29. Django ORM requêtes
- 30. Ignorer les erreurs d'insertion par lots Postgresql
Stupide question ici, mais comment ajoutez-vous exactement "dbprof" à votre demande GET? Si je viens juste de le virer, je reçois une erreur "404 Page non trouvée" et Django se plaint de ne pas trouver l'URL dans urls.py. Devez-vous ajouter quelque chose à urls.py? – William
Basé sur le code, je pense que vous devriez ajouter? Dbprof = True à la fin de l'URL – Omaraf