2013-06-04 5 views
0

bin 이러한 종류의 사전을 mongiengine에 저장하는 방법.값이있는 사전을 객체로 저장하는 법

{'xnFH8XCJiwMRFu8A': <dropbox.session.OAuthToken object at 0x2e4efd0>, 
'867s6bnwbg3kc':<dropbox.session.OAuthToken object at 0x2e50610>} 

보관 용 계정 액세스 토큰을 저장하려고합니다.

미리 도움을 주셔서 감사합니다.

도움 주셔서 감사합니다.

하지만 InvalidStringData 오류가 발생합니다. 내가 어디에서 잘못하고 있는지 알지 못한다. 이 MongoDB를에 연결하는 방법이 물건을 저장하는 방법을 정확하게 보여줍니다

#TOKEN_STORE is the above dictionary 
    dbsession = DBsession.objects.get(oauth_token=oauth_token) # oauth_token is is request 

    v = pickle.dumps(TOKEN_STORE, -1) 
    print v # this prints proper binary string 
    print pickle.loads(v) # this prints proper values 

    dbsession.update(set__token_store=v) # this line fails and throws error on 
             #InvalidStringData 


#DBSession Definition 
# me is mongoengine 
class DBSession(me.Document): 
    oauth_token = me.StringField(required=True) 
    token_store = me.BinaryField() 
+0

시도'pickle' 또는' – zhangyangyu

답변

2

다음과 같이

코드입니다.
Plz은 읽기 : http://docs.mongoengine.org/en/latest/apireference.html#documents

내가 그러나이 전적으로 그것을 사용하는 경우 MongoDB의 사용을 권장하지 않습니다.

나는 그것이

해야한다고 생각 : 당신이 정말로 단지 지속적인 방법으로 자신의 DICT를 저장하고 싶은 경우에 당신은 유일한 문제가 업데이트 된 후 당신은뿐만 아니라 http://docs.python.org/2/library/shelve.html

업데이트를 보류 사용할 수 있습니다 파이썬에서 접근 할 필요가

dbsession.update(set__token_store=pickle.loads(v)) 
+0

안녕을 shelve', 제안의 zhangyangyu 및 pypat에 대한 덕분에, 내가 사용 피클. 하지만 지금 다음 오류 점점 : InvalidStringData : 문서의 문자열이 유효한 UTF-8이어야합니다 '\ X80 \ X02} Q의 \의 x00에서 (U \ x10A2TVbIeYxoGRWDQPq \의 x01cdropbox.session ..' 어떤 도움 .. – Somesh

+0

당신이 수를 귀하의 코드를 게시 하시겠습니까? (어쩌면 귀하의 질문을 업데이트하여) 인코딩 오류처럼 보이지만 실제로 무엇을했는지 모른 채로 수정하는 것은 어렵습니다. – pypat

+0

pickle.loads (v)를 수행하면 다시 변환됩니다. 독창적 인 TOKEN_STORE dictinary는 bson으로 변환 할 수 없다는 오류를 일으킬 것이므로 이진 값으로 저장하고 이진 값으로 저장하는 이유입니다. 나중에 값에 액세스해야 할 때 pickle.loads (dession. token_store) 그리고 추가 작업을 수행하십시오. ( – Somesh

관련 문제