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

时间:2015-02-06 23:01:23

标签: django django-orm

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

1 个答案:

答案 0 :(得分:-1)

通常是的,你可以打印SQL QuerySet生成,但是因为exists()没有返回QuerySet但返回一个简单的布尔值,所以更难。

也许最简单的方法不是仅针对exists()打印SQL查询,而是针对视图中的所有查询。您可以关注如何执行此操作(example)或您可以使用django-debug-toolbar


如果您对打印QuerySet生成的查询感兴趣,可以使用以下方法打印完整的SQL查询:

print(Model.objects.filter(...).exists().query)

这将打印完整的查询。

如果您的意图是能够复制粘贴查询并直接执行它,它可能并不总是有效。例如,打印查询并不总是产生正确的语法,例如日期。然而,在Django Query对象中有另一个有用的方法(QuerySet.query是实例) - sql_with_params()。这将返回参数化查询和参数本身。例如:

sql, params = Model.objects.filter(...).exists().query.sql_with_params()
Model.objects.raw(sql, params=params)