fetch()在GAE中获取什么?

2024-03-29 09:45:43 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我另一个question的后续。在

我以为

    mylist = list(Rep().all().fetch(50))

使mylist成为一个列表。但当我想知道它的长度时,我得到了信息

^{pr2}$

谁能解释一下我做错了什么吗?在

    Rep().replist = L                                   
    Rep().put()                              
    mylist = list(Rep().all().fetch(50))
    P = mylist.pop()
    self.response.out.write(len(P))

更新

作为可能遇到同样问题的其他人的参考;我发布了下表,这对我很有帮助。(原here

Rep().........................Rep object 
Rep.all().....................Query object 
list(Rep.all())...............List of Rep objects. 
list(Rep.all())[0]............A single Rep object 
list(Rep.all())[0].replist....A list

谢谢你的回答。在


Tags: self信息列表objectputresponsefetchall
3条回答

而不是这样:

Rep().replist = L                                    
Rep().put()                               
mylist = list(Rep().all().fetch(50)) 
P = mylist.pop() 
self.response.out.write(len(P)) 

试试这样的方法:

^{pr2}$

你的代码:

Rep().replist = L                                    
Rep().put()                               

正在创建Rep实例,然后将其replist分配给L。然后创建另一个Rep,并对其调用put()。因此,您要写入数据存储的是一个空白Rep-它没有您的列表。在

在本规范中:

mylist = list(Rep().all().fetch(50)) 

您正在对Rep的实例调用all(),而应该直接在类上调用它。另外,您不需要将结果包装在list()中,因为fetch()已经返回了一个列表。在

然后在下面找到这个:

self.response.out.write(len(P)) 

您正在尝试获取P(它是Rep)的长度,而不是Preplist的长度。在

更新:

针对第一条评论:

在本规范中:

r = Rep()

Rep()正在创建Rep的实例。然后,r =将该实例分配给名称r。所以现在名称r指的是Rep的实例。在

那么在这个代码中:

r.replist = L

它正在分配r的replist属性来引用列表L。在

您是对的,您可以这样做,而不是这两行:

r = Rep(replist = L)

它的作用是将L传递给Rep__init__函数,参数名为replistRep__init__函数是从db.Model基类继承的。此函数用于将提供给模型上同名属性的任何参数的值赋值。因此在本例中,它将L分配给replist属性。所以它的效果和原来的两行代码是一样的,但是工作方式有点不同。在

针对第二条评论:

Python中的=运算符表示赋值,这与数学等价不同。在

所以这个代码:

r = Rep()

并不意味着r现在等同于Rep(),并且现在可以使用r和{}来表示相同的事情。在

它的意思是r现在等于Rep()的结果。^{所做的是分配一个Rep的新实例。因此,r是对新的Rep的引用。{{cd15>以后不需要调用一个新的实例。在

如果要打印replist属性的元素数。在

self.response.write(len(P.replist));

希望我能帮你:p

试试这个:

self.response.out.write(len(mylist))

相关问题 更多 >