Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更新数据存储中的信息?_Python_Google App Engine_Google Cloud Datastore - Fatal编程技术网

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)