1

如何使用 Google App Engine 分配 ListProperty?

    name = self.request.get("name")
    description = self.request.get("description")
    list = '''insert code here'''

我希望列表像字典一样工作,这是否可以使用 Google App Engine,如果可以,如何:

[wordone:分数;wordtwo : 分数; 词三:分数]

^我希望列表属性存储一些这样的数据,这怎么可能?

4

2 回答 2

2

更改为NDB并使用 Pickle 属性:

Value 是一个 Python 对象(例如一个列表或一个字典或一个字符串),可以使用 Python 的 pickle 协议进行序列化;Datastore 将 pickle 序列化存储为 blob。默认情况下未编制索引。

新开发银行属性

然后就可以直接使用了:

class table(ndb.Model):
    data_dict = ndb.PickleProperty(default = {})

然后

dd = table()
dd.data_dict['word_one'] = "Some_Score"
于 2012-11-26T17:34:18.087 回答
2

实际上,您将无法将真正的字典存储为 a 中的类型ListProperty(它仅支持数据存储属性类型,其中dict不是一种),因此您将无法获得您正在寻找的行为。是否所有数据都相同(即每个元素代表一个单词分数)?假设将每个单词作为其自己的属性存储在模型上是没有意义的,一个“肮脏”的解决方案是创建一个ListPropertytype str,然后将单词和 score 作为单独的元素附加。然后,当您在列表中搜索一个单词时,您将返回该单词索引位置的值 + 1。这看起来像:

class MyEntity(db.Model):
  name = db.StringProperty()
  description = db.TextProperty()
  word_list = db.ListProperty()

然后,您可以添加以下词:

new_entity = MyEntity()
new_entity.word_list = ['word1', 1, 'word2', 2, 'word3', 10]

然后,您可以查询特定实体,然后检查其word_list属性(列表),查找目标词并在其后一个位置返回元素。


更复杂的建议

但是,如果这不是一个选项,您可以考虑创建另一个WordScore看起来像这样的模型(比如说):

class WordScore(db.Model):
  word = db.StringProperty()
  score = db.IntegerProperty()

然后,当您需要添加新分数时,您将创建一个WordScore实例,填写属性,然后将其分配给适当的实体。我还没有测试过这些,但这个想法是这样的:

# Pull the 'other' entity (this would be your main class as defined above)
q = OtherEntity.all()
q.filter('name =', 'Someone')
my_entity = q.get()

# Create new score
ws = WordScore(parent=my_entity)
ws.word = 'dog'
ws.score = 2
ws.put()

然后,您可以通过执行以下操作来提取dog“某人”的分数(同样,目前完全未经测试 - 请注意:)):

# Get key of 'Someone'
q = OtherEntity.all()
q.filter('name =', 'Someone')
my_entity = q.get().key()

# Now get the score
ws = WordScore.all()
ws.filter('word = ', 'dog').ancestor(my_entity)
word_score = ws.get().score
于 2012-11-26T07:26:21.490 回答