相关疑难解决方法(0)

从Django QuerySet获取SQL

如何从QuerySet对象获取Django将在数据库中使用的SQL?我正在尝试调试一些奇怪的行为,但我不确定哪些查询会进入数据库.谢谢你的帮助.

python sql django django-queryset

279
推荐指数
5
解决办法
14万
查看次数

Django的注释和聚合方法之间的区别?

Django QuerySet有两种方法,annotateaggregate.文件说:

与aggregate()不同,annotate()不是终结子句.annotate()子句的输出是QuerySet.

它们之间还有其他区别吗?如果没有,那么为什么aggregate存在?

django django-queryset

96
推荐指数
4
解决办法
3万
查看次数

记录所有sql查询

如何记录我的django应用程序执行的所有SQL查询?

我想记录所有内容,包括来自管理站点的SQL.我看到了这个问题常见问题解答,但我仍然无法弄清楚应该放在哪里

from django.db import connection
connection.queries
Run Code Online (Sandbox Code Playgroud)

将所有内容记录到一个文件中?

所以我的问题是 - 我应该怎么做一个文件(比如all-sql.log),其中记录所有SQL语句?

django

77
推荐指数
5
解决办法
5万
查看次数

始终为假Q对象

在Django ORM中,如何创建始终为False的Q对象?

这类似于关于始终为True Q对象的问题,但反过来说.

请注意,这不起作用:

Foobar.objects.filter(~Q()) # returns a queryset which gives all objects
Run Code Online (Sandbox Code Playgroud)

为什么我需要Q对象而不是简单的False值?这样我就可以将它与其他Q值结合起来,例如:

condition = always_true_q_object
if something_or_other:
    condition = condition | foobar_that_returns_a_q_object()
if something_or_other2:
    condition = condition | foobar_that_returns_a_q_object2()
Run Code Online (Sandbox Code Playgroud)

django

11
推荐指数
3
解决办法
1476
查看次数

django运行测试时如何查看sql查询?

我的一个django应用程序单元测试失败了

DatabaseError: ORA-00942: table or view does not exist
Run Code Online (Sandbox Code Playgroud)

我想看到导致此错误的实际SQL查询.你知道怎么做吗?

sql oracle django unit-testing django-testing

10
推荐指数
5
解决办法
6532
查看次数

获取 Django 中 .exists() 查询生成的 SQL 语句

是否可以在 Django 中打印由 queryset.exists() 语句生成的 SQL?

django django-orm

8
推荐指数
1
解决办法
2062
查看次数

当 Debug 为 False 时,如何从 Django 打印 sql 查询

从 doc如何查看 Django 正在运行的原始 SQL 查询?

我可以通过以下方式执行sql:

from django.db import connection
connection.queries
Run Code Online (Sandbox Code Playgroud)

但它只在一段时间内可用 Debug == True

如何将sql打印为Debug == False

谢谢

更新

我想要这样的东西:

from django.db import connection
from django.db import reset_queries

reset_queries()  # Clears the query.
with transaction.atomic():
    r = Amodel.objects.create(
        ...
    )

    Bmodel.objects.filter(id__in=handle_ids_).update(status=4)

# Prints the sql executed in this transaction block.
logger.info("[sql_execute]: {}".format(connection.queries))


Run Code Online (Sandbox Code Playgroud)

django

6
推荐指数
1
解决办法
69
查看次数

我如何在Django中进行故障排除?

我来自PHP背景,我一直在努力学习Python,但是我在调​​试方面遇到了很多麻烦,因为我还不确定如何在Django或Python中解决这个问题.

我习惯于能够print_rvar_dumpPHP中的所有东西.我可以在控制器,服务层或甚至模型和数据中显示在我的Web浏览器中.

我不能在Django中这样做.根据我正在做的事情,尝试print从我的视图中执行一个对象将导致页面关闭或输出一些东西到我的控制台,这对我没有帮助.这是一个例子:

class Page(View):
    def get(self, request, *args, **kwargs):
       response = Data.objects.all()

       # for whatever reason, I want to print something right now:
       print response

       # return JsonResponse({'success':response})
Run Code Online (Sandbox Code Playgroud)

以上内容将完全取消我的页面并发出通知说:

The view didn't return an HttpResponse object. It returned None instead.
Run Code Online (Sandbox Code Playgroud)

在使用CBV的时候有一些情况,我注意到我可以将数据转移到某个地方,例如控制台.但它不会对我有任何帮助.例如,如果我试图查看response上面的内容,它就会显示如下:

[object Object] [object Object] [object Object]
Run Code Online (Sandbox Code Playgroud)

A var_dump会让我真正看到它的内部.

所以我猜我错了.人们只是在用Python调试时转储数据吗?如果他们这样做,你如何执行此操作,并将其显示在Web浏览器或控制台中?如果没有,我如何处理Django中的基本故障排除?示例场景:

  1. 我想查看列表或字典的内容
  2. 我想看看ORM正在执行的原始SQL查询
  3. 我想通过在内部滑动一些文本以在前端输出来查看是否正在执行某个功能

python django

5
推荐指数
1
解决办法
781
查看次数

Django查询性能

我对Django查询有一个与性能相关的问题。

假设我有一张有10,000条记录的员工表。现在,如果我要选择5个年龄大于或等于20岁的随机雇员,那么可以说大约有5500名20岁或以上的雇员。django查询将是:

Employee.objects.filter(age__gte=20).order_by('?')[:5]
Run Code Online (Sandbox Code Playgroud)

并且该查询在mysql中的原始副本将是:

SELECT * FROM `database`.`employee` 
WHERE `employee`.`age` >= 20
ORDER BY RAND ()
LIMIT 5;
Run Code Online (Sandbox Code Playgroud)

从Django查询的外观看,数据库首先返回5500条记录,然后python以随机或我们选择的任何顺序对这些记录进行排序,并返回前五个记录的大块,而原始查询将仅直接从数据库返回五个记录。

我的问题是两个查询之间是否有性能差异?如果是这样,哪个更好,为什么?

python mysql sql-server django performance

5
推荐指数
1
解决办法
379
查看次数

如何输出Django Admin生成的SQL

如何输出Django管理员正在生成的SQL来查询dhangelist页面的结果?我尝试queryset()通过以下方法覆盖:

def queryset(self, *args, **kwargs):
    qs = super(MyAdmin, self).queryset(*args, **kwargs)
    print 'sql:',qs.query
    return qs
Run Code Online (Sandbox Code Playgroud)

但是即使我正在浏览/admin/myapp/mymodel/?segment=123&date=2012-1-1,这也会显示查询:

sql: SELECT myapp_mymodel.id, myapp_mymodel.segment, myapp_mymodel.start_date
FROM myapp_mymodel ORDER BY myapp_mymodel.start_date ASC
Run Code Online (Sandbox Code Playgroud)

请注意,完全没有我在URL中指定的任何过滤器。

我正在尝试调试一个奇怪的问题,即如果我手动查询SQL中的表,会看到一个结果,但是Django的管理员显示的是完全不同的东西。我怀疑Django中有一个错误会导致生成错误的SQL,但是我需要查看SQL来确认这是问题所在。

我正在使用Django 1.5。

python django django-orm

0
推荐指数
1
解决办法
938
查看次数

Django:准备查询但不执行它

我正在尝试在以下循环中使用 Django 进行一些有效的查询:

for division in divisions:
  playoffs = league.playoff_set.filter(division=division, double_elimination=True)
Run Code Online (Sandbox Code Playgroud)

我想也许playoffs在循环之前过滤,只选择那些double_elimination=True会增强它的:

playoffs = league.playoff_set.filter(double_elimination=True)
for division in divisions:
  division_playoffs = playoffs.filter(division=division)
Run Code Online (Sandbox Code Playgroud)

但是现在我担心这会playoffs在循环的每次运行中触发查询,而不是过滤先前检索到的结果。

它是按预期工作还是像我担心的那样工作?我应该使用它Q来构建这些性能更好的查询吗?

django

0
推荐指数
1
解决办法
469
查看次数