Почему в 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":
Теперь, я заменяю 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 запрос не выполняется, как показано ниже:
Итак, почему 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 запрос выполняется, как показано ниже:
Теперь, я заменяю 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 запрос, как показано ниже:
Итак, чтобы выполнить оба 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 запроса выполняются, как показано ниже:



