0

GAE db.Model はタプルのリストを格納できません。したがって、リストを json.dumps 文字列として保存する必要があり、リストをエンティティから引き戻すときに json.loads が文字列をロードします。これを自動化したい。これが私の試みです:

class example(db.Model):
    someAttr = db.StringListProperty()
    A = db.StringProperty()
    B = db.StringProperty()
    C = db.StringProperty()

    def __setattr__(self, name, value):
        #convert json to string for storage
        if name in ("A", "B", "C"):
            value = json.dumps(value)
        #call default set method
        return super(Quote, self).__setattr__(name, value)

    def __getattribute__(self, name):
        #convert string to json for retrieval
        if name in ("A", "B", "C"):
            val = super(Quote, self).__getattribute__(name)
            return json.loads(val)
        else: 
            # default get behavior
            return super(Quote, self).__getattribute__(name)

エンティティの A、B、C 属性を設定しようとすると、次のようになります。

BadValueError: Property C must be a str or unicode instance, not a list
4

1 に答える 1

3

非常に大きな JSON を保存する必要がない場合は、NDB をチェックすることをお勧めします。組み込みの JsonProperty があります: https://developers.google.com/appengine/docs/python/ndb/properties#types

また、App Engine Googl Group で、大きな JSON をより効率的に格納する方法について説明している興味深い投稿を見つけました: https://groups.google.com/forum/#!msg/google-appengine/WPfAvHDGNjQ/XfakEMm1qzoJ

于 2012-07-10T03:54:27.177 に答える