Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python fetch()在GAE中获取什么?_Python_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Python fetch()在GAE中获取什么?

Python fetch()在GAE中获取什么?,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,这是我的另一篇文章的后续 我以为 mylist = list(Rep().all().fetch(50)) 使mylist成为一个列表。但当我试图知道它的长度时,我得到了信息 self.response.out.write(len(P)) TypeError: object of type 'Rep' has no len() 谁能解释我做错了什么 Rep().replist = L Rep().p

这是我的另一篇文章的后续

我以为

    mylist = list(Rep().all().fetch(50))
使
mylist
成为一个列表。但当我试图知道它的长度时,我得到了信息

self.response.out.write(len(P))
TypeError: object of type 'Rep' has no len()
谁能解释我做错了什么

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

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

谢谢你的回答

试试这个:

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

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

self.response.write(len(P.replist));
希望我能帮助你:p

而不是这个:

Rep().replist = L                                    
Rep().put()                               
mylist = list(Rep().all().fetch(50)) 
P = mylist.pop() 
self.response.out.write(len(P)) 
试着这样做:

r = Rep()
r.replist = L                                    
r.put()                               
mylist = Rep.all().fetch(50)
P = mylist.pop() 
self.response.out.write(len(P.replist)) 
你的密码是:

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

在此代码中:

mylist = list(Rep().all().fetch(50)) 
r = Rep()
r.replist = L
r = Rep()
您正在对
Rep
的实例调用
all()。另外,由于
fetch()
已经返回了一个列表,因此不需要将结果包装在
list()

然后在下面你有这个:

self.response.out.write(len(P)) 
您试图获取的是
p
(这是一个
Rep
)的长度,而不是
p
replist
的长度

更新:

针对第一条评论:

在此代码中:

mylist = list(Rep().all().fetch(50)) 
r = Rep()
r.replist = L
r = Rep()
Rep()
正在创建
Rep
的实例。然后,
r=
将该实例分配给名称
r
。所以现在名称
r
指的是
Rep
的实例

那么在这个代码中:

mylist = list(Rep().all().fetch(50)) 
r = Rep()
r.replist = L
r = Rep()
它正在分配
r
的replist属性以引用列表
L

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

r = Rep(replist = L)
这样做的目的是将
L
传递给
Rep
\uuuuu init\uuuu
函数,参数名为
replist
Rep
\uuuuu init\uuuu
函数继承自
db.Model
基类。此函数用于将提供给模型上同名属性的任何参数的值赋值。因此在本例中,它将
L
分配给
replist
属性。因此,它的效果与最初的两行代码相同,但工作方式略有不同

针对第二条评论:

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

所以这个代码:

mylist = list(Rep().all().fetch(50)) 
r = Rep()
r.replist = L
r = Rep()
并不意味着
r
现在等同于
Rep()
,并且您现在可以使用
r
Rep()
来表示相同的意思


这意味着
r
现在等于
Rep()
的结果。
Rep()
所做的是分配一个
Rep
的新实例。因此,这使得
r
成为对新
Rep
的引用。因此,要在以后引用同一实例,您需要使用
r
,而不是
Rep()
(每次调用时都会分配一个新实例)。

p not list。这是一个“Rep”实例。如何将其制作为列表,以便打印replist的元素?len(mylist)返回mylist中的列表数。我假设P=mylist.pop()将弹出mylist中的最后一个列表。我想打印弹出列表中的元素。但正如DonaldlsFreak提到的,弹出的不是一个列表,而是一个“Rep”实例。抱歉,我不明白为什么我保存到数据存储的列表没有返回。或者,执行此简单数据库操作的最佳方法是什么?再次感谢。@Saxon Druce:谢谢你的解释,这很有帮助。我还在研究它,但你知道是否有一种替代点符号的符号;例如,我相信你的
r.replist=L
等同于
Rep(replist=L)
对吗?这对我来说更有意义。再次感谢。@Saxon Druce:你说得对;我写入数据存储的那个肯定是空的,因为模板正在打印空列表。但据我所知,你的
r.replist=lr.put
与我的相当,因为你定义了r=Rep()。对的还是我遗漏了什么?另一个注意事项是:您不需要将.fetch()的返回包装在列表()中-返回值已经是一个列表。谢谢Nick!我已经更新了我的答案,提到list()不是必需的。