我需要檢查項目是否在數據存儲中,然後再更新它。如何更新我的數據存儲中的信息?
我有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)
@David Underhill:非常感謝!這解決了問題。我添加了上面的更新代碼。你是否也可以提出解決方案來解決其他代碼的問題。我如何更新這個項目?它現在的方式是更新整個數據庫;所以總是有一件物品。(對不起,我仍然很關心點符號和什麼對象是什麼)再次感謝。 – Zeynel 2010-11-07 19:56:51
不客氣。我不確定「如何更新此項目」中的「this」是什麼意思?也許你可以提供你想要完成的更多細節(這裏沒問題;在另一個問題上可能會更好)。 – 2010-11-07 20:07:08
@David Underhill:謝謝。我開始了一個新的問題:http://stackoverflow.com/questions/4119560/updating-just-1-entity-in-datastore – Zeynel 2010-11-07 20:39:01