首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将GqlQuery结果集转换为python字典

将GqlQuery结果集转换为python字典
EN

Stack Overflow用户
提问于 2008-10-17 13:34:03
回答 4查看 3.3K关注 0票数 3

假设我有这样一个模特

代码语言:javascript
复制
class Foo(db.Model):
    id = db.StringProperty()
    bar = db.StringProperty()
    baz = db.StringProperty()

我要做一个像这样的GqlQuery

代码语言:javascript
复制
foos = db.GqlQuery("SELECT * FROM Foo")

--我想获取GqlQuery的结果,并将其转化为某种可以从不同语言中操作的JSON字符串。

我现在就是这么做的

  1. 向Foo类中添加一个方法,将其转换为字典 def toDict(self):返回{ 'id':self.id,'bar':self.bar,'baz':self'baz }
  2. 循环遍历GqlQuery结果并手动将每个Foo实例添加到字典中 fooDict = {} for foo in foos: fooDictfoo.id = foo.toDict()返回simplejson.dumps(fooDict)

我的方法是可行的,但感觉有点恶心。

有没有更干净,更“毕多尼”的方法来处理这件事?

--结束格式不一定就是我上面所做的。它必须能很好地转换成JSON,这样我就可以通过Javascript/PHP/任何东西来处理它。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-17 15:37:18

看看google.appengine.api.datastore。它是google.appengine.ext.db构建的底层数据存储API,它返回实体对象,子类dict。您可以使用带有google.appengine.ext.gql的GQL查询它,或者(我个人的偏好)使用查询类,这避免了为GQL解析器构造文本字符串的需要。api.datastore中的查询类的行为与记录在这里完全一样(但是返回较低级别的实体对象而不是模型实例)。

例如,可以将上面的查询重新表示为"datastore.Query("Foo").all()“。

票数 2
EN

Stack Overflow用户

发布于 2008-10-17 14:21:25

我不能做得比这更好,但这里有几个想法:

代码语言:javascript
复制
class Foo:
    id = db.StringProperty() # etc.
    json_attrs = 'id bar baz'.split()

# Depending on how easy it is to identify string properties, there
# might also be a way to assign json_attrs programmatically after the
# definition of Foo, like this
Foo.json_attrs = [attr for attr in dir(Foo)
                  if isStringProperty(getattr(Foo, attr))]

fooDict=dict((foo.id,dict(getattr(foo, attr)
                          for attr in Foo.json_attrs))
              for foo in foos)
票数 1
EN

Stack Overflow用户

发布于 2008-10-18 08:41:26

http://code.google.com/p/google-app-engine-samples/source/browse/trunk/geochat/json.py?r=55

编码器方法将很好地解决的需求。我建议把过多的约会时间options....out时间作为一个时代来处理?真的?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/212125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档