auto_now_add属性在每次调用put时都会更新吗?
我有一个数据库模型,其中一个属性设置了 auto_now_add=True
。但是看起来它并没有按我预期的那样工作——每次调用 put
时,它都会被更新(我使用了自己的 key_name
,所以第二次、第三次或更多次调用 put
并不会真的创建新记录,只是更新了现有记录)。
以下是代码:
class User(db.Model):
id = db.IntegerProperty()
added = db.DateTimeProperty(auto_now_add=True)
name = db.StringProperty()
...
# this handler can be called several times
def get(self):
user = User(key_name="id"+unique_user_id)
user.id = unique_user_id
user.name = current_name
user.put()
2 个回答
1
每次覆盖实体的时候,其实是在创建一个新的记录。auto_now
和auto_now_add
之间的区别是由模型框架决定的;它无法根据记录是否已经存在来做出不同的处理。相反,你应该像@Shay建议的那样,更新已有的记录。
4
你每次都在重新创建这个实体,下面是代码应该长什么样:
#This will create the object only once
return User.get_or_insert(key_name="id%d" % unique_user_id,
id=unique_user_id,
name = current_name)
#This will create the object and update some properties
#You can't change the value of key_name
user = User.get_or_insert(key_name="id%d" % unique_user_id,
id=unique_user_id)
user.name = name
user.put()
return user