首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取django在postgresql上运行的所有查询

获取django在postgresql上运行的所有查询
EN

Stack Overflow用户
提问于 2010-11-07 06:18:54
回答 4查看 2.6K关注 0票数 4

我正在做一个django-postgresql项目,我需要看到django在数据库上运行的每个查询(这样我就可以对查询进行微调)。有没有办法获取这些查询。更新:我的开发环境是ubuntu linux

EN

回答 4

Stack Overflow用户

发布于 2010-11-16 08:56:24

那么,您可以将pgsql服务器设置为记录每个查询。或者只是用来记录那些速度慢的。查看postgresql.conf文件,它非常接近于自我记录。

票数 1
EN

Stack Overflow用户

发布于 2011-09-22 01:36:47

查看这个问题(以及最常见的两个答案):django orm, how to view (or log) the executed query?

您还可以查看Djando文档:https://docs.djangoproject.com/en/dev/faq/models/#how-can-i-see-the-raw-sql-queries-django-is-running

希望这对你有帮助,安东

票数 1
EN

Stack Overflow用户

发布于 2012-05-03 01:18:07

您可以用它装饰一个请求处理程序或其他函数,它将在最后很好地打印带有总计的sql。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4115462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档