Python 如何更新数据存储中的信息?
在更新之前,我需要检查项目是否在数据存储中 我有两个列表:Python 如何更新数据存储中的信息?,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,在更新之前,我需要检查项目是否在数据存储中 我有两个列表: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(aut
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)
此函数用于更新数据库:
def write_to_db(S, C):
REP = Rep(mUNIQUE=S, mCOUNT=C)
db.put(REP)
受此启发,我尝试:
但结果并不是我所期望的。C_结果总是空的;并创建一个新记录,而不是更新。我做错了什么?谢谢
EDIT3:问题已解决
根据David Underhill的评论,我更新了代码,现在可以使用了
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)
我想更改mCOUNT,然后将其写入数据存储。我该怎么做?这看起来和他们在游戏中做的完全一样,但我无法让它工作。谢谢你的帮助
编辑
我根据David Underhill的答案更新了密码。这解决了问题(但功能不正确。我不确定这是否应该是另一个问题)
问题是查询试图筛选
mUNIQUE
。但是,您将mUNIQUE
声明为一个从未编制索引的。因此,您的查询永远不会找到任何结果
解决方案:将mUNIQUE
更改为a(默认情况下索引)
您还应该考虑在A-中更新代码> Re> <代码> -如果两个请求同时尝试更新同一个实体,则当前代码可能无法添加属性“添加代码>计数[I] /代码>。
此外,您还可以将
S=db.Text(UNIQUES[i])
更新为S=UNIQUES[i]
@David Underhill:非常感谢!这就解决了问题。我在上面添加了更新的代码。您还可以就如何修复其余代码提出任何解决方案吗。如何仅更新此项目?它现在的方式更新了整个数据库;所以里面总有一个项目。(对不起,我仍然对点符号和对象是什么感到困惑)再次感谢。不客气。我不知道你在“如何更新此项目”中所说的“此”是什么意思?也许你可以提供更多关于你正在努力完成的任务的细节(这很好;在另一个问题中可能更好)。@David Underhill:谢谢。我开始了一个新问题:抱歉,我删除了这个问题。另一个问题-您的更新代码每次都会创建一个全新的Rep
实体。与其调用write_to_db
函数,不如这样做:rep=C_RESULT[0];rep.mCOUNT+=计数[i];rep.put()
(在事务中)。
C_QUERY = Rep.all()
C_QUERY.filter("mAUTHOR =", user)
C_QUERY.filter("mUNIQUE =", UNIQUES[i])
C_RESULT = C_QUERY.fetch(1)
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)