1

pickle プロパティを介して GAE Gql Datastore に保存しようとしている Python 辞書があります。

私はこの質問と回答に従おうとし ました.GAEに辞書のリストを保存します

しかし、以下のコードでは機能しません..リストに問題があるというエラーが表示されます

次のように、ピクル プロパティとデータ モデル クラスをセットアップします。

class PickleProperty(db.Property):
    def get_value_for_datastore(self, model_instance):
        value = getattr(model_instance, self.name, None)
        return pickle.dumps(value)

    def make_value_from_datastore(self, value):
        return pickle.mloads(value)

class MDB(db.Model):
    Name = db.StringProperty(required=True)
    Times = PickleProperty()
    created = db.DateTimeProperty(auto_now_add = True)

私のコードには、データを挿入して読み取る関数があります。

def m_time_manage(m=""):

    if not m:
        r = db.GqlQuery("select * from MDB")
    else:
        #find specific masjid requested
        r = db.GqlQuery("select * from MDB where Name = %s" % (s))

    #if masjid time data doesn't exist in db throw in placeholders...
    if r is None:
        times = {}
        times['a'] = "8:49"
        times['b'] = "10:19"

        times_entry = MDB(Name="abc",Times=times)
        times_entry.put()

    r = db.GqlQuery("select * from MasjidDB")
    return (r[0].Name, r[0].Times)

私の get 関数では、次のように m_time_manage() ftn を呼び出します。

(mName, times) = m_time_manage()
        self.write(times)

pickle.loads と end of file エラーに何かがあるというこのエラーが表示されます...完全なエラーは次のとおりですが、Python に辞書を保存する方法が他にわかりません。

 line 31, in make_value_from_datastore
    return pickle.loads(value)
  File "/usr/lib/python2.7/pickle.py", line 1382, in loads
    return Unpickler(file).load()
  File "/usr/lib/python2.7/pickle.py", line 858, in load
    dispatch[key](self)
  File "/usr/lib/python2.7/pickle.py", line 880, in load_eof
    raise EOFError

事前に助けてくれてありがとう

4

1 に答える 1

6

NDB に切り替えて、組み込みの PickleProperty を使用することをお勧めします。https://developers.google.com/appengine/docs/python/ndb/propertiesを参照してください

于 2012-06-01T17:05:56.350 に答える