gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:38:36 26 4
gpt4 key购买 nike

我正在用 Python(GAE) 做我的第一个小项目,使用查询操作 GAE 的数据库没有任何困难。但是当谈到编辑单个实体时,我遇到了一个问题。我所需要的只是一个简单的计数器,它会在每次站点访问时递增。所以我创建了一个实体(这只完成一次,只是为了创建实体,然后这段代码从项目中删除)通过:

counter_name = 'default_counter'

def counter_key(counter_n=None):
return db.Key.from_path('Counter', counter_name)

class Counter(db.Model):
amount = db.IntegerProperty()

class CounterClass(webapp.RequestHandler):
def get(self):
counter = Counter(counter_key(counter_name))
counter.amount = 0
counter.put()

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

counter = db.get(db.Key.from_path('Counter', 'default_counter'))
counter.amount += 1
counter.put()

我收到这个错误。

ERROR 2011-09-06 21:49:41,562 _webapp25.py:464] 'NoneType' object has no attribute 'amount' Traceback (most recent call last): File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\webapp_webapp25.py", line 703, in call handler.post(*groups) File "H:\gae-bin\counter.py", line 48, in post counter.amount += 1 AttributeError: 'NoneType' object has no attribute 'amount'

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

提前致谢。

最佳答案

您用来创建 Counter 实体的代码可能是错误的。它所做的是创建一个 Counter 实体,其 parentCounter,键名等于 default_counter。这似乎不是您想要的,您用于更新计数器的代码证明了这一点。

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

counter = Counter(key_name='default_counter')
# or
counter = Counter(key=db.Key.from_path('Counter', 'default_counter'))

请注意,一般来说,拥有这样的访问计数器是个坏主意。 GAE 实体有每秒 5 次更新的限制,因此如果您扩展超过该限制,就会遇到问题。

处理更新限制的常用技术是使用分片计数器,如下所述:http://code.google.com/intl/pl/appengine/articles/sharding_counters.html .如果您不介意偶尔丢失一些计数器增量,那么数据存储和内存缓存的组合也是一种选择。

关于python - 如何在 GAE (Python) 中编辑单个实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7326657/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com