在更新之前,我需要检查该项是否在数据存储中。在
我有两个列表:UNIQUES = ["B","K","V"]和COUNTS = [5, 10, 3]
这是模型:class Rep(db.Model):
mAUTHOR = db.UserProperty(auto_current_user=True)
mUNIQUE = db.TextProperty()
mCOUNT = db.IntegerProperty()
mDATE = db.DateTimeProperty(auto_now_add=True)
此函数用于更新数据库:
^{pr2}$
受此启发,我尝试:for i in range(len(UNIQUES)):
C_QUERY = Rep.all()
C_QUERY.filter("mAUTHOR =", user)
C_QUERY.filter("mUNIQUE =", UNIQUES[i])
C_RESULT = C_QUERY.fetch(1)
if C_RESULT:
C = C_RESULT.mCOUNT + COUNTS[i]
S = db.Text(UNIQUES[i])
write_to_db(S,C)
else:
C = COUNTS[i]
S = UNIQUES[i]
write_to_db(S, C)
但结果并不是我所期望的。C_RESULT始终为空;并且不更新,而是创建一个新记录。我做错什么了?谢谢!在
EDIT3:问题已解决
根据大卫·安德希尔的评论,我更新了代码,现在可以用了。在if C_RESULT:
rep=C_RESULT[0]
rep.mCOUNT+=COUNTS[i]
rep.put()
EDIT2:相关问题
如何更新此查询并使用更新的信息将其放回原处?在C_QUERY = Rep.all()
C_QUERY.filter("mAUTHOR =", user)
C_QUERY.filter("mUNIQUE =", UNIQUES[i])
C_RESULT = C_QUERY.fetch(1)
然后我想写数据存储。我该怎么做?这看起来和他们在this page中所做的完全一样,但我无法使其工作。谢谢你的帮助。在
编辑
我根据大卫·安德希尔的回答更新了密码。这解决了问题(但功能不正确。我不确定这是否应该是一个不同的问题)。在for i in range(len(UNIQUES)):
C_QUERY = Rep.all()
C_QUERY.filter("mAUTHOR =", user)
C_QUERY.filter("mUNIQUE =", UNIQUES[i])
C_RESULT = C_QUERY.fetch(1)
if C_RESULT:
C = C_RESULT[0].mCOUNT + COUNTS[i]
S = UNIQUES[i]
write_to_db(S, C)
else:
C = COUNTS[i]
S = UNIQUES[i]
write_to_db(S, C)