2012-05-31 2 views
1

나는 pickle 속성을 통해 GAE Gql Datastore에 저장하려고하는 Python 사전이 있습니다. PickleProperty를 사용하여 GAE에 사전 저장

나는이 질문과 답변, Store a list of dictionaries in 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) 

내가 데이터를 삽입하고

인 그것을 읽어 내 코드에서 함수를 다음과 같이 다음과 같이 내가 m_time_manage() 각주를 호출 내 get 함수에서
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) 

, 나는 pickle.loads 및 파일 오류의 말에 뭔가가 있다는 것을이 오류가

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

... 전체 오류입니다 하지만 난 사전에 어떤 도움

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 

덕분에, 파이썬 사전을 저장하는 방법을 다른 모르겠어요

+1

make_value 함수의 "m"은 오타가 있습니까? 나는 당신이 pickle.mloads() 함수 ("marshal"모듈에서 오는) 함수가 아니라, 보통의 loads() 함수를 원한다고 생각한다. – Blckknght

+0

은'MasjidDB' 코드에서'MDB'와 동일합니까? – aschmid00

+0

예. 그리고 @ Blckknght 이유는 내가 다른 기능을 시도했지만 당신의 도움에 감사드립니다 내가 일할 수있어! – user772401

답변

관련 문제