DjangoのQuerySetのSQLは変数に入れた時にではなく、呼び出した時に初めて実行される
今回はDjangoのQuerySetのSQLは変数に入れた時にではなく、呼び出した時に初めて実行されるということについてお話ししていきます。
DjangoのQuerySetのSQLは変数に入れた時にではなく、呼び出した時に初めて実行される
例として、次のBookモデルがあったとします。
1 2 3 4 5 6 7 |
from django.db import models # Create your models here. class Book(models.Model): title = models.CharField(max_length=120) author = models.CharField(max_length=120) price = models.DecimalField(decimal_places=2, max_digits=100, null=True) |
実行したSQLがコンソールに現れるように、settings.pyにログ出力の設定を追記します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'level': 'DEBUG', }, }, } |
Bookオブジェクトを全て取得するQuerySetを定義します。
この時、コンソールにSQLが流れないことに注目してください。
1 2 |
>>> b = Book.objects.all() >>> |
続いて、QuerySetを入れたbを実行してみます。
このとき、コンソールに流したSQLが表示されます。
1 2 3 4 |
>>> b (0.000) SELECT "book_book"."id", "book_book"."title", "book_book"."author", "book_book"."price" FROM "book_book" LIMIT 21; args=() <QuerySet [<Book: Book object (2)>, <Book: Book object (3)>]> >>> |
終わりに
今回はDjangoのQuerySetのSQLは変数に入れた時にではなく、呼び出した時に初めて実行されるということについてお話しいたしました。
ディスカッション
コメント一覧
まだ、コメントがありません