49 votes

Requêtes SQL brutes dans les vues Django

Comment effectuer les opérations suivantes en utilisant du SQL brut en views.py ?

 from app.models import Picture

def results(request):
    all = Picture.objects.all()
    yes = Picture.objects.filter(vote='yes').count()
    return render_to_response('results.html', {'picture':picture, 'all':all, 'yes': yes}, context_instance=RequestContext(request))

À quoi ressemblerait cette fonction results ?

82voto

DTing Points 12969
>>> from django.db import connection
>>> cursor = connection.cursor()
>>> cursor.execute('''SELECT count(*) FROM people_person''')
1L
>>> row = cursor.fetchone()
>>> print row
(12L,)
>>> Person.objects.all().count()
12

utilisez la clause WHERE pour filtrer le vote pour oui :

 >>> cursor.execute('''SELECT count(*) FROM people_person WHERE vote = "yes"''')
1L

4voto

Cela peut être fait dans une requête si vous utilisez PostgreSQL. Sinon, vous pouvez modifier la requête en conséquence et obtenir les résultats.

 from django.db import connection
from app.models import Picture

def results(request):
    with connection.cursor() as cursor:
        query = """
        SELECT count(*) as all_count, 
        count(*) FILTER(WHERE vote = 'yes') as yes_count
        FROM people_person;
        """
        cursor.execute(query)
        row = cursor.fetchone()
        all_count, yes_count = row

2voto

Tinashe Robert Points 491

Vous pouvez essayer ceci

 Picture.objects.raw("SELECT 1 as id ,"\
 "(SELECT  count(*) as yes FROM people_person WHERE vote='yes') as yes ,"\
 "(SELECT  count(*) FROM people_person WHERE vote='no') as no ,"\
 "(SELECT  count(*) FROM people_person WHERE vote='all') as all ")

0voto

santhosh_dj Points 169

SQL brut avec le nom de base de données spécifique :

 from django.db import connections
cursor = connections['database_name'].cursor()
cursor.execute("select * from table_name")

database_name = Toute base de données créée par nous

table_name = Tout nom de table créé par nous

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X