2017-08-30 70 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]')] 

我设法使用Python从Google App Engine数据存储中查询上述数据,但我无法将其循环到JSON中。即使我阅读了文档,也不太理解Keys的概念。除了希望理解如何将没有限制的JSON转换为整个对象的方式,任何想法我怎么才能提取'key'(字符串),'email'和'created'(DateTime) ?顺便说一下,我试图检索所有数据。如何使用python和ndb模型循环以下数据存储区数据并返回到json.dumps?

例如:

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

NDB的Key是不在JSON正确序列Python类实例(对象)。但它带有.urlsafe()方法将其转换为可以被json转储的字符串。从Retrieving Entities from Keys

你也可以使用一个实体的键以获得编码字符串适合 为在URL中嵌入:

url_string = sandy_key.urlsafe() 

这会产生像agVoZWxsb3IPCxIHQWNjb3VudBiZiwIM由此可以 后来被用来重建钥匙,找回原来的实体:

sandy_key = ndb.Key(urlsafe=url_string) 

现在,要对整个实体进行json编码,您必须编写一个自定义方法,该方法将首先将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

相关问题