Почему в Django не выполняется запрос "SELECT"?

У меня есть person таблица , как показано ниже:

# "store/models.py"

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=30)

И, у меня есть test вид с print(Person.objects.all()) как показано ниже:

# "store/views.py"

from django.http import HttpResponse
from .models import Person

def test(request):
    print(Person.objects.all()) # Here

    return HttpResponse("Test")
<<<Затем, когда я запускаю

представлениеtest, запросSELECT выполняется, как показано ниже. * Я использовал PostgreSQL и эти журналы ниже являются журналами запросов PostgreSQL. Вы можете проверить В PostgreSQL, как регистрировать SQL запросы с транзакционными запросами, такими как "BEGIN" и "COMMIT":

enter image description here

Теперь, я заменяю print(Person.objects.all()) на Person.objects.all(), как показано ниже:

# "store/views.py"

from django.http import HttpResponse
from .models import Person

def test(request):
    Person.objects.all() # Here
    # print(Person.objects.all())

    return HttpResponse("Test")

Или, я заменяю print(Person.objects.all()) на persons = Person.objects.all(), как показано ниже:

# "store/views.py"

from django.http import HttpResponse
from .models import Person

def test(request):
    persons = Person.objects.all() # Here
    # print(Person.objects.all()) 

    return HttpResponse("Test")

Затем, когда я запускаю test представление, SELECT запрос не выполняется, как показано ниже:

enter image description here

Итак, почему SELECT запрос не выполняется в Django?

QuerySets are lazy говорит, как показано ниже, поэтому SELECT query не выполняется, когда вы запускаете test view:

Django не будет выполнять запрос, пока не будет оценен QuerySet.

Кроме того, есть пример, в котором SELECT запрос не выполняется. У меня есть person таблица, как показано ниже:

# "store/models.py"

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=30)

И, у меня есть test вид с print(Person.objects.all()) как показано ниже:

# "store/views.py"

from django.http import HttpResponse
from .models import Person

def test(request):
    print(Person.objects.all()) # Here

    return HttpResponse("Test")

Затем, когда я запускаю test представление, SELECT запрос выполняется, как показано ниже:

enter image description here

Теперь, я заменяю print(Person.objects.all()) на print(Person.objects.all().create(name="Tom")), как показано ниже:

# "store/views.py"

from django.http import HttpResponse
from .models import Person

def test(request):
    print(Person.objects.all().create(name="Tom")) # Here
    # print(Person.objects.all())

    return HttpResponse("Test")

Затем, когда я запускаю test view, SELECT query не выполняется. Вместо этого выполняется INSERT запрос, как показано ниже:

enter image description here

Итак, чтобы выполнить оба SELECT и INSERT запроса, нам нужно разделить print(Person.objects.all().create(name="Tom")), как показано ниже:

# "store/views.py"

from django.http import HttpResponse
from .models import Person

def test(request):
    print(Person.objects.all()) # Here
    Person.objects.create(name="Tom") # Here

    return HttpResponse("Test")

Затем, когда я запускаю test представление , оба SELECT и INSERT запроса выполняются, как показано ниже:

enter image description here

Вернуться на верх