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

时间:2011-10-16 11:27:44

标签: python google-app-engine google-cloud-datastore

我有db模型,其中一个属性有auto_now_add=True。但看起来它并不像我预期的那样有效 - 每次调用put时它都会更新(我使用自己的key_name,因此put的第二/第三/ N调用并没有真正创建新记录 - 只需更新它。)

以下是代码:

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

通过每次覆盖实体,您实际上是在创建新记录。 auto_nowauto_now_add之间的区别由模型框架强制执行;根据记录是否已存在,它无法采取不同的行动。相反,您应该将现有记录更新为@Shay suggests

相关问题