【发布时间】:2013-12-04 16:47:39
【问题描述】:
我经常被要求将存储在 NDB 模型中的数据导出到 csv。为此,我通常最终会编写这样的模型:
from google.appengine.ext import ndb
class Foo(ndb.Model):
monty = ndb.StringProperty()
python = ndb.StringProperty()
@property
@classmethod
def fieldnames(cls):
return ['monty', 'python']
并且在导出模块中类似于
# pseudocode ...
query = Foo.gql('where monty = :1', 'bunny')
data = [littlefoo._to_dict() for littlefoo in query]
fieldnames = Foo.fieldnames
with open('outfile.csv', 'w') as f:
writer = csv.DictWriter(f, fieldnames, dialect=dialect)
writer.writerows(data)
请注意,需要使用 fieldnames 方法来确定输出 csv 中字段的顺序。这种方法的问题在于,对于任何具有大量属性的模型,添加fieldnames 方法都是丑陋的重复工作。理想情况下,我想在声明它们时简单地对属性进行排序,并以相同的顺序检索它们以获取fieldnames。有没有办法按顺序检索这些属性? Foo._properties 按字母顺序排列。
【问题讨论】:
-
我也想做同样的事情,并想出了一个比公认答案更简单的解决方案。以防万一你仍然感兴趣,看看我的回答:stackoverflow.com/a/54744631/1965404
标签: python google-app-engine csv app-engine-ndb