Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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
如何在GAE(Python)中编辑单个实体?_Python_Google App Engine_Google Cloud Datastore - Fatal编程技术网

如何在GAE(Python)中编辑单个实体?

如何在GAE(Python)中编辑单个实体?,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,我正在用Python(GAE)做我的第一个小项目,使用查询操作GAE的数据库没有困难。但当涉及到编辑单个实体时,我面临一个问题。 我所需要的只是一个简单的计数器,它会在每次现场访问时递增。 因此,我通过以下方式创建一个实体(只需创建一次实体,然后从项目中删除此代码): 没关系。 但当我尝试增加它时,使用: counter = db.get(db.Key.from_path('Counter', 'default_counter')) counter.amount += 1 counter.put

我正在用Python(GAE)做我的第一个小项目,使用查询操作GAE的数据库没有困难。但当涉及到编辑单个实体时,我面临一个问题。 我所需要的只是一个简单的计数器,它会在每次现场访问时递增。 因此,我通过以下方式创建一个实体(只需创建一次实体,然后从项目中删除此代码):

没关系。 但当我尝试增加它时,使用:

counter = db.get(db.Key.from_path('Counter', 'default_counter'))
counter.amount += 1
counter.put()
我得到这个错误

错误2011-09-06 21:49:41562_webapp25.py:464]“非类型”对象 没有属性“amount”回溯(最近一次调用last):文件 “C:\程序文件 (x86)\Google\Google\u appengine\Google\appengine\ext\webapp\u webapp25.py“, 第703行,在呼叫中 handler.post(*组)文件 “H:\gae bin\counter.py”,第行 48,在邮局 counter.amount+=1 AttributeError:“非类型”对象没有 属性“金额”

我检查了不同的变体,但仍然无法更改实体的值。 我做错了什么


提前感谢。

您实际上并没有使用该键创建实体。您应该更改此选项:

counter = Counter(db.Key.from_path('Counter', 'default_counter'))
为此:

counter = Counter(key=db.Key.from_path('Counter', 'default_counter'))
由于您将立即将金额设置为
0
,因此在初始化实体时也可以这样做:

counter = Counter(key=db.Key.from_path('Counter', 'default_counter'), amount=0)

请注意这不是在App Engine上创建计数器的好方法。您可能需要使用类似或的技术,用于创建
计数器
实体的代码可能是错误的。它所做的是创建一个
计数器
实体,其父项
计数器
,其键名等于
默认计数器
。这似乎不是你想要的,你用来更新计数器的代码就证明了这一点

您需要通过以下方式之一分配
计数器
实体的键名:

counter = Counter(key_name='default_counter')
# or
counter = Counter(key=db.Key.from_path('Counter', 'default_counter'))
请注意,一般来说,像这样的访问计数器是个坏主意。GAE实体具有每秒5次更新的限制,因此,如果超出该限制,您将遇到问题


处理更新限制的常用技术是使用分片计数器,如下所述:。如果您不介意偶尔丢失一些计数器增量,那么数据存储和memcache的组合也是一种选择。

谢谢。但实体还是被创建了。我可以在数据库索引中的localhost/_ah/admin中看到这一点。谢谢你的链接。我会试试这些。或者你可以只做
计数器(key\u name='default\u Counter',amount=0)
-不需要指定整个键。
counter = Counter(key_name='default_counter')
# or
counter = Counter(key=db.Key.from_path('Counter', 'default_counter'))