2015-02-06 58 views
2

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

+2

尝试:http://stackoverflow.com/questions/1074212/show-the-sql-django-is-running – cdvv7788 2015-02-06 23:19:26

+1

或者更好的是,使用此:https://github.com/ django-debug-toolbar/django-debug-toolbar 一旦安装,它将显示请求中使用的所有查询 – cdvv7788 2015-02-06 23:21:56

+0

@ cdvv7788 - 谢谢 – freyley 2015-02-07 00:02:43

回答

0

通常情况下,您可以打印SQL QuerySet s生成但是因为exists()不返回QuerySet但返回一个简单的布尔值,这是更困难的。

也许最简单的方法不是打印SQL查询只是exists(),而是查看视图中的所有查询。您可以按照其他SO问题如何做到这一点(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) 
+3

'Model.objects.filter()。exists()'将返回一个布尔值。并且在布尔值上访问.query()会给出'AttributeError'。或不? – 2017-02-01 18:05:55