2010-01-25 15 views
8

Çok fazla SQL deyimi çalıştıran bir Python/Django uygulamasına sahibim. Hata ayıklama amacıyla, sadece çalıştırılan tüm SQL deyimlerini listeleyen basit bir görünüm oluşturmam gerektiğini düşündüm.django.db.connection.queries öğesini kullanma

belgelerine göre bu kod bunu yapabilecek kadar olmalıdır:

from django.db import connection 
    connection.queries 

sürece DEBUG Doğru olarak. Bununla birlikte, bu bana hiçbir şey vermemektedir. DEBUG kesinlikle doğruya ayarlanmış. Bu bağlantı hangi sorgularda saklanır? Demek istediğim, bir çok SQL deyimini yürüten bir sayfa yürütebilmem ve daha sonra oluşturduğum http://myserver/sql görünümüne geçip o SQL ifadelerini görebiliyorum, değil mi? Elbette aynı tarayıcı oturumunu kullanarak ...

Kodda herhangi bir yerde db.reset_queries() çalıştırılıyor olup olmadığını kontrol ettim, öyle değil.

Bağlantı noktaları her zaman neden boştur?

cevap

17

Ben şu anki işlemden gelen sorguları gördüğünüz doğru. Aynı görünümde veya konsolda kullanabilirsiniz, ancak görünümler arasında kullanamazsınız.

Görünümlerinizde hangi sorguların yürütüldüğünü görmenin en iyi yolu Django debug toolbar'u kullanmaktır.

+0

Django hata ayıklama araç çubuğunu kontrol edeceğim. Teşekkür ederim. – HaukurHaf

+0

Bir üretim sunucusunda DDT çalıştıran hiç bir zaman başarılı olmadım. Sadece yerel olarak çalışan Django'nun geliştirme sunucusu ile çalışmak gibi görünüyor. – William

3

Bu sorguların bellekte saklandığını ve işlemler arasında paylaşılmadığını düşünüyorum, böylece yalnızca geçerli işlem tarafından yapılan sorgulara erişebilirsiniz.

./manage.py shell oturumuna yapıştırdığınız kodu dener, yalnızca daha önce bu kabuk oturumunda yaptığım sorguları görüyorum.

queries bir görünümden bir şablon bağlamında geçirir ve şablonda gösterirseniz, yalnızca bu görünümde yapılan sorguları görüyorum. Bu, dev sunucuyu kullanıyor olsa da.

Ben — varsayalım ancak birden isteklerini sunma bir süreç var nerede bir ortamda bu kullanıyorsanız, görürdünüz daha sorgularının her isteği kaydediliyor olduğunu — test etmedim.

+0

Tamam, bu yüzden her istekte çalışacağım. Bu mantıklı. Bunu işaret ettiğin için teşekkürler :-) – HaukurHaf

7

@Daniel Roseman onun iyi bir fikir, ama kutudan çıktığı sql sorguları bilmek istiyorum:

django-command-extensions yükleyip yüklü uygulamalar ekleyin.

  • debugsqlshell: Çıkışlar Python etkileşimli kabukta çalışırken işletilirse SQL , projeniz, bunlardan birinin içine birçok utils komutları ekleyecektir.

örnek: benim için sabit budur python manage.py debugsqlshell

In [1]:from django.contrib.auth.models import User 
In [1]:User.objects.all() 

Out[2]: SELECT "auth_user"."id", 
    "auth_user"."username", 
    "auth_user"."first_name", 
    "auth_user"."last_name", 
    "auth_user"."email", 
    "auth_user"."password", 
    "auth_user"."is_staff", 
    "auth_user"."is_active", 
    "auth_user"."is_superuser", 
    "auth_user"."last_login", 
    "auth_user"."date_joined" 
    FROM "auth_user" LIMIT 21 [1.25ms] 
2
from django.db import connections 
x = connections['rating'] 
x.queries 

So check another connections! 
0

; Kullanılanları saymak için

.

.

İlgili konular