django檢視執行的sql查詢語句
阿新 • • 發佈:2018-11-19
對於一些比較複雜的查詢在做優化時,通常需要檢視下django底層執行的sql語句。
例如:
data = Tasks.objects.select_related().filter(~Q(pk=4) & (~Q(reviewer__contains='pengpai(彭湃)') | ~Q(handler__contains='pengpai(彭湃)') | ~Q(director__contains='pengpai(彭湃)')))
可以通過這種方法:
data = Tasks.objects.select_related().filter(~Q(pk=4) & (~Q(reviewer__contains='pengpai(彭湃)') | ~Q(handler__contains='pengpai(彭湃)') | ~Q(director__contains='pengpai(彭湃)'))).query.__str__()
結果如下
'SELECT `db_tasks`.`id`, `db_tasks`.`create_at`, `db_tasks`.`publisher`, `db_tasks`.`service_type`, `db_tasks`.`task_type`, `db_tasks`.`period`, `db_tasks`.`title`, `db_tasks`.`body`, `db_tasks`.`director`, `db_tasks`.`reviewer`, `db_tasks`.`handler`, `db_tasks`.`critical`, `db_tasks`.`finish_time`, `db_tasks`.`status`, `db_tasks`.`send_range`, `db_tasks`.`person_id`, `db_person`.`id`, `db_person`.`create_at`, `db_person`.`username`, `db_person`.`city`, `db_person`.`department`, `db_person`.`permission`, `db_person`.`group_id` FROM `db_tasks` INNER JOIN `db_person` ON (`db_tasks`.`person_id` = `db_person`.`id`) WHERE (NOT (`db_tasks`.`id` = 4) AND (NOT (`db_tasks`.`reviewer` LIKE BINARY %pengpai(彭湃)%) OR NOT (`db_tasks`.`handler` LIKE BINARY %pengpai(彭湃)%) OR NOT (`db_tasks`.`director` LIKE BINARY %pengpai(彭湃)%))) ORDER BY `db_tasks`.`create_at` DESC'