googleappengine:实现有序列表的集合

2024-04-23 08:19:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在appengine中快速实现一个简单的高分服务。以下是两个模型类:

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:是否有方法确保hiscore表按每个成员分数的“score”属性排序?我能自动限制列表到100个条目吗?在

非常感谢

鲁本


Tags: 模型dbmodeltimeclassscoreappenginestringproperty
2条回答

ListProperty是python对象的列表,简单明了。如果我正确理解您的问题,您所描述的是HiscoreTable中的hiscore列表

分数=数据库列表属性(他的核心)

为了排序,在编写HiscoreTable实体之前,必须使用sorted按分数对列表进行排序。它所做的相当于对添加到列表中的Hiscore对象进行pickle处理,并在随后的查询中检索相同的pickle版本。本质上,这将是一份他以前的核心排名状态的快照列表,而不是当前状态。如果您的目的是将分数缓存一段时间,那么这是可行的,但是您可以考虑使用memcache。在

或者,为了引用实际的Hiscore实体,您可以这样做

scores = db.ListProperty(db.Key)

用钥匙取回他的钥匙。同样,您需要在编写列表之前使用sorted对列表进行排序,这将在编写HiscoreTable时存储排名快照。在

但是,如果您需要的是每个国家的最新分数表,那么您每次都必须直接查询Hiscore模型。在

^{pr2}$

有两种方法:

  1. HicoreTable包含Hiscore键的列表:

    scores = db.ListProperty(db.Key)
    

    在这种情况下,您受到实体上最大索引数的限制:5000

  2. 每个Hiscore都有对其所属的HiscoreTable的引用:

    class Hiscore(db.Model):
        hiscoreTable = db. ReferenceProperty(HiscoreTable)
    

相关问题 更多 >