我需要保存的數據如下圖所示:如何在GAE數據存儲區中正確保存數據?
field1value=SomeStringValue
field1score=10
field2value=SomeOtherValue
field2score=20
...
fieldNvalue=SomeNValue
fieldNscore=N
即我有N個領域,每個領域都有自己的名字,存儲有與分數值。如何在GAE數據存儲中正確存儲這些數據?應通過字段名稱輕鬆訪問數據。我還需要計算最終得分(field1score + field1score + ... + fieldNscore
)。
N約爲100,數據庫中的記錄總數將是巨大的。
Upd。我用下面的方法,但看起來它是不是最好的一個:
class User(db.Model):
field_names = db.StringListProperty()
field_values = db.StringListProperty()
field_scores = db.ListProperty(int)
score_value = db.IntegerProperty()
def fields_add(user_key_name, field_name, field_value, field_score):
user = User.get(user_key_name)
if user:
field_names = user.field_names
field_values = user.field_values
field_scores = user.field_scores
if field_name in user.field_names:
field_index = user.field_names.index(field_name)
field_values[field_index] = field_value
field_scores[field_index] = field_score
else:
field_names.append(field_name)
field_values.append(field_value)
field_scores.append(field_score)
user.field_names = field_names
user.field_values = field_values
user.field_scores = field_scores
# TODO: update user.score_value
user.put()
謝謝,烏鴉。什麼是字段名稱?我應該有第三份名單嗎? – 2012-02-28 17:19:10
@LA_如果您的字段名稱列表是靜態的,您可能希望保留名稱<->索引查找,甚至不將它們存儲在User類中。只需將每個人初始化爲具有良好默認值(零)的相同大小的數組。但是,如果您想根據特定的指定分數執行任何查詢,則可能需要考慮明確列出每個字段,而不是將值/分數存儲在列表中。我很確定這可以動態完成 - 不需要輸入200個屬性(如果字段列表不是靜態的,那麼Expando模型也可能是合適的)。 – Raven 2012-02-29 06:20:54