2017-08-30 7 views
1
[User(key=Key('User', 5275456790069248), auth_ids=[u'[email protected]'], created=datetime.datetime(2017, 8, 29, 22, 50, 36, 297407), email='[email protected]'), 
User(key=Key('User', 5838406743490560), auth_ids=[u'[email protected]'], created=datetime.datetime(2017, 8, 29, 16, 23, 16, 406468), email='[email protected]'), 
User(key=Key('User', 6401356696911872), auth_ids=[u'[email protected]'], created=datetime.datetime(2017, 8, 30, 12, 34, 51, 816926), email='[email protected]')] 

Google App EngineのデータストアからPythonを使用して上記のデータをクエリできましたが、JSONにループすることができません。私が文書を見ても、キーの概念をあまり理解していないのです。次のデータストアのデータをpythonとndbモデルでループしてjson.dumpsに戻すにはどうすればいいですか?

「キー」(文字列)、「電子メール」、「作成済み」(日付時刻)を抽出するにはどうすればよいでしょうか、JSONに制限なしでキーを使用してオブジェクト全体をダンプする方法を理解するだけでなく、 ?ところで、私はすべてのデータを取得しようとしています。例えば

:NDBで

users_new_list = [] 

allusers = User.query().fetch() 
for user in all_users: 
    #How to get key in string and pass into 'users_new_list' 
    users_new_list.append(keyString) 
+0

使用しているデータストアライブラリはどれですか?コードを表示すると良いかもしれません。通常、キーはオブジェクトであり、正しくシリアル化されないことがあります。いくつかのライブラリは、キーを文字列としてエンコードする方法を提供しています。 –

+0

いいえSQLとNDBモデル – dnez

答えて

1

Keyは、JSONに正しくシリアル化しないPythonのクラスのインスタンス(オブジェクト)です。しかし、.urlsafe()メソッドをjson-dumpできる文字列に変換する方法があります。

ます。また、URLに埋め込むための 適したエンコードされた文字列を取得するエンティティのキ​​ーを使用することができます:Retrieving Entities from Keysから

url_string = sandy_key.urlsafe() 

これは 後で再構築するために使用することができますagVoZWxsb3IPCxIHQWNjb3VudBiZiwIMのような結果を生成しますキーおよび取得元のエンティティ:

sandy_key = ndb.Key(urlsafe=url_string) 

今、エンティティ全体をjson-encodeするには、まずKeyプロパティを文字列に変換するカスタムメソッドを記述する必要があります。 How to make a class JSON serializable

+0

ありがとう!以前は間違った方向に向かいました。私はちょうど重要なクラスのドキュメントを見ていた: https://cloud.google.com/appengine/docs/standard/python/ndb/keyclass これはid、id = sandy_key.id()を返します – dnez

+1

サイドノート、 IDを使用すると、祖先情報は保持されないため、同じ親キーを持つ(または親キーがない)エンティティ内で一意になります。元のエンティティキーを再構築するには、その親キーが必要です。キーのurlsafe文字列には、祖先全体が含まれます。エンティティの祖先を使用しない場合は問題ありません。 –

+0

ありがとうございました!情報は本当に役に立ちます。 – dnez

関連する問題