假设我有:
模型.py:
class Books(models.Model):
title = models.CharField(max_length = 200)
author = models.CharField(max_length = 200)
price = models.CharField(max_length = 200)
并在manage.py shell
:
# hits the database
>>> book_one = Books.objects.get(id = 1)
# hits the database
>>> foo = book_one.title
u'Foo book'
假设上面的代码,如果我输入book_one.author
我们将再次访问数据库。
通过使用select_related()
if i type book_one.title
or book_one.author
orbook_one.price
我们不会再次访问数据库,只有当我们实例化它时。
如果我输入books = Books.objects.all()
并假设我想使用循环manage.py shell
将其特定值(假设我只想存储title
和author
字段)存储在一个空列表中,例如:for
empty_list = []
for book in books:
empty_list.append([book.title, book.author])
# only 1 data, so we're gonna loop only once
所以问题是:基于上面的循环,我们要访问数据库多少次?是因为我们通过了两次book.title
,book.author
还是只有一次