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