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