考虑以下示例
data = Employee.objects.all()
for i in data:
print i.name
从我在这里的低估来看,它会为每个循环访问数据库。我不确定天气我是对还是错。
下一个疑问是
data = Employee.objects.get(id=1)
在这种情况下,它什么时候会访问数据库?如果我将数据存储到另一个变量中呢?
如果我做了怎么办
data = Employee.objects.all()
data1 = []
data1 = data
for i in data1:
print i
以上和这个有什么区别?
最佳答案
get()
调用将立即访问数据库。将获取所有模型数据,并且在访问模型属性时不会访问数据库(除非它们是 ForeignKeys
)。如果您已将其存储在另一个变量中,则这些实例不会以任何方式链接。例如:var1 = Employee.objects.get(pk=1)
var2 = Employee.objects.get(pk=1)
var1.name = 'var1'
var2.name = 'var2'
var2.save()
print var1.name
>>> 'var1'
如果您想获取最新保存的对象版本,您可以调用
refresh_from_db()
方法 var1.refresh_from_db()
var1.name
>>> 'var2'
data1
访问查询集即可。多变的。它不会在分配时进行评估,但会在迭代时进行评估。 关于django - 无法理解何时在 Django 中评估 QuerySets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34808368/