auto_now_add属性在每次调用put时都会更新吗?

2 投票
2 回答
728 浏览
提问于 2025-04-17 04:25

我有一个数据库模型,其中一个属性设置了 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_nowauto_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

撰写回答