我有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()
答案 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_now
和auto_now_add
之间的区别由模型框架强制执行;根据记录是否已存在,它无法采取不同的行动。相反,您应该将现有记录更新为@Shay suggests。