2010-11-07 61 views
2

我需要檢查項目是否在數據存儲中,然後再更新它。如何更新我的數據存儲中的信息?

我有2所列出: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) 

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.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)     

我想更改mCOUNT,然後將其寫入數據存儲。我如何?這看起來像他們在this page中所做的完全相同,但我無法使其工作。謝謝你的幫助。

編輯

我更新每大衛Underhill的答案代碼。這解決了問題(但功能不正確,我不確定這是否應該是一個不同的問題)。

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) 

回答

1

問題是查詢試圖過濾mUNIQUE。但是,您將mUNIQUE宣告爲db.TextProperty,即從未對編制索引。結果,您查詢從未找到任何結果。

:更改mUNIQUEdb.StringProperty(其通過默認索引)。

你也應該考慮在transaction更新Rep - 當前的代碼可能無法添加屬性COUNTS[i]如果兩個請求試圖同時更新同一實體。

此外,您可以將S = db.Text(UNIQUES[i])更新爲簡單S = UNIQUES[i]

+0

@David Underhill:非常感謝!這解決了問題。我添加了上面的更新代碼。你是否也可以提出解決方案來解決其他代碼的問題。我如何更新這個項目?它現在的方式是更新整個數據庫;所以總是有一件物品。(對不起,我仍然很關心點符號和什麼對象是什麼)再次感謝。 – Zeynel 2010-11-07 19:56:51

+0

不客氣。我不確定「如何更新此項目」中的「this」是什麼意思?也許你可以提供你想要完成的更多細節(這裏沒問題;在另一個問題上可能會更好)。 – 2010-11-07 20:07:08

+0

@David Underhill:謝謝。我開始了一個新的問題:http://stackoverflow.com/questions/4119560/updating-just-1-entity-in-datastore – Zeynel 2010-11-07 20:39:01

相關問題