1

Google App EngineでListPropertyを割り当てるにはどうすればよいですか?

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

リストを辞書のように機能させたいのですが、これはGoogle App Engineで可能ですか?もしそうなら、どのように:

[wordone:スコア; wordtwo:スコア; ワードスリー:スコア]

^ listプロパティにこのようなデータを格納したいのですが、どうすればこれが可能ですか?

4

2 に答える 2

2

実際には、真のディクショナリをタイプとしてaに格納することはできませんListProperty(データストアプロパティタイプのみをサポートし、そのうちのdict1つではありません)。そのため、探している動作を取得することはできません。すべてのデータは同じですか(つまり、各要素は単語のスコアを表します)?各単語を独自のプロパティとしてモデルに保存しても意味がないと仮定すると、「汚い」解決策の1つはListProperty、タイプを作成しstr、単語とスコアを別々の要素として追加することです。次に、リスト内の単語を検索すると、その単語のインデックス位置+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プロパティ(リスト)を調べて、ターゲットワードを探し、その1つ後の位置に要素を返すことができます。


より複雑な提案

ただし、それがオプションでない場合は、次のような別のモデル(たとえば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 に答える
2

NDBに変更し、Pickleプロパティを使用します。

値は、Pythonのpickleプロトコルを使用してシリアル化可能なPythonオブジェクト(リスト、dict、文字列など)です。データストアは、ピクルスのシリアル化をBLOBとして保存します。デフォルトではインデックスが作成されていません。

NDBプロパティ

次に、それを直接使用できます。

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

それから

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