我想在App Engine中快速实现简单的高分服务。以下是两个模型类:
class Hiscore(db.Model):
time = db.DateTimeProperty()
playerName = db.StringProperty()
score = db.IntegerProperty()
class HiscoreTable(db.Model):
countryCode = db.StringProperty()
scores = db.ListProperty(???)
问题1 :我究竟如何使用'ListProperty'?很难找到例子。
问题2 :有没有办法确保HiscoreTables按每个成员得分的“得分”属性排序?我可以自动将列表限制为100个条目吗?
非常感谢,
流便
答案 0 :(得分:2)
ListProperty是一个简单明了的python对象列表。如果我正确理解你的问题你所描述的是HiscoreTable中的Hiscores列表
得分= db.ListProperty(Hiscore)
对于排序,在编写HiscoreTable实体之前,您必须使用sorted
按分数对列表进行排序。它将要做的就是腌制你添加到列表中的任何Hiscore对象,并在后续查询中检索相同的pickle版本。基本上它将是先前Hiscore排名状态的快照列表,而不是当前状态。如果您打算将分数缓存一段时间,那么这样可行 - 但您可以考虑使用memcache。
或者,为了引用实际的Hiscore实体,你可以做到这一点
scores = db.ListProperty(db.Key)
用钥匙取回Hiscore的。再次,您可能希望在编写列表之前使用sorted
对列表进行排序,这样可以在写入HiscoreTable时存储排名快照。
但是,如果您需要的是每个国家/地区的最新分数表,那么您每次都必须直接查询Hiscore模型。
query.filter('countryCode =', somecode).order('-score').fetch(limit=100)
答案 1 :(得分:0)
有两种方法可以做到:
HicoreTable
包含Hiscore
键列表:
scores = db.ListProperty(db.Key)
在这种情况下,您受限于实体的最大索引数:5000
每个Hiscore
都引用了它所属的HiscoreTable
:
class Hiscore(db.Model):
hiscoreTable = db. ReferenceProperty(HiscoreTable)