关于下载GAE High Replication Datastore数据
关于下载GAE High Replication Datastore数据[实战篇]下
通过bulk loader可以批量上传下载数据,GAE支持xml,csv格式数据批量上传,以及xml,csv和文本格式下载。
你可以选择自动生成一个bulkloader.yaml,或者手动编码来写一个bulk loader。谷歌不推荐手动编写,个人也觉得自动生成才是王道。
如何自动生成bulkloader.yaml
bulkloader.yaml是一个描述数据格式的配置文件,格式例如xml或csv。bulk loader进行数据导入时需要这个配置文件来将外部数据(xml或csv)转换为中间数据——python字典类型,然后将中间数据——python字典转换为Google Engine Datastore的Entity数据。下载数据时,转换顺序则反过来。
执行以下命令自动生成bulkloader.yaml:
$ appcfg.py create_bulkloader_config --filename=bulkloader.yaml --url=http://your_app_id.appspot.com/_ah/remote_api
这个命令会在当前目录下创建一个bulkloader.yaml文件,一般说来你还要对这个原始的bulkloader.yaml文件进行配置才能满足你对数据传递的要求。
配置bulkloader.yaml文件
bulkloader.yaml文件主要包含两部分python_preamble和transformers。
python_preamble: - import : google.appengine.ext.bulkload.transform - import : google.appengine.ext.db - import : re - import : base64
一般来说,这部分你都不用修改,除非你要在转换格式中用到其他模块或方法,例如我在这里增加了datetime。
python_preamble: - import : base64 - import : re - import : google.appengine.ext.bulkload.transform - import : google.appengine.ext.bulkload.bulkloader_wizard - import : google.appengine.ext.db - import : google.appengine.api.datastore - import : google.appengine.api.users - import : datetime
第二部分transformers是用来描述数据类型的,其中包含一个或多个kind,视你在datastore中kind数量而定。每个kind中又包括以下内容:
connector:用来指定输入输出格式,值为xml,csv或文本。 connector_options:connector的一些属性。 property_map:每个字段的映射关系(即转换关系)。配置bulkloader.yaml的第一步就是设置connector,谷歌默认的是csv格式,无论输入输出都要求csv首行是字段名称。connector为:simplexml, csv, simpletext。
connector的配置参数可以在 谷歌文档 找到。
对property而言:
property:datastore中的字段名称。 external_name:xml的tag名称,或者csv首行中的字段名。 import_transform:上传时的数据格式,或者是数据转换规则。 export_transform:下载时的数据格式,或者是数据转换规则。property和external_name是必须的,如果只是想要上传或者下载的话,可以注释掉export_transform或者import_transform。
关于simplexml
bulkloader.yaml中的simplexml目前只支持简单的xml结构,例如:
< book > < article > < author > John Kerry </ author > < title > How is it, China </ title > < content > Yes, there is a huge population. </ content > </ article > </ book >
在bulkloader.yaml中配置为:
connector: simplexml connector_options: xpath_to_nodes: /book/article style: element_centric
datastore中的每一条entity会作为一个article输出,author, title, content之间不能互相嵌套,不能有层级关系。style具有两个值element_centric或者attribute_centric,意思是根据xpath找到的node,是使用它的属性值作为数据还是它的子节点作为数据来进行转换。
在你的GAE应用数据模型中,或许你设置一个自动添加创建日期的字段,例如create_date。
这时你应该这样配置 import_transform: "lambda x: datetime.datetime.now()"。
上传下载数据:
当配置完成bulkloader.yaml后,就可以开始使用它来传递数据了。你不是一定要把bulkloader.yaml放在你的应用文件夹中,你可以放在任意文件夹中,然后在命令行切换到该文件夹,执行以下命令:
$ appcfg.py download_data --application=s~ifantastic-dragon --auth_domain=gmail.com --url=https://ifantastic-dragon.appspot.com/_ah/remote_api --kind=Wordroot --config_file=bulkloader.yaml --filename=x.xml
因为GAE的不稳定,我也不是每次都成功,但以上的命令是成功最高的。虽然我也觉得有点无稽,但还是请保持以上的参数顺序,貌似以上顺序是最优的。
附:如何下载GAE源代码
谷歌为GAE编写了多种语言说明,但并不是所有语言都得到了最好的更新。经验之谈的博文可以帮助理解,但想要最好地理解GAE,还是读官方文档,而英文文档是最佳选择。
例如我曾在华蟒邮件列表看到有人抱怨GAE不能下载源文档,而事实是在谷歌 中文文档 缺少了如何下载源代码这一小节,但在 英文文档 中可以找到。
要下载GAE App源代码,在命令行或者终端中执行以下命令:
appcfg.py download_app -A <your_app_id> -V <your_app_version> <output-dir>
实例:$ appcfg.py download_app -A ifantastic-dragon -V 5 /Downloads/ GaeApp 1 2 3 1 - 应用的id号 2 - 应用的版本号 3 - 下载目的地目录,如果不传入<output-dir>,则下载到当前目录,前提是当前目录为空。
执行命令后,会出现以下代码并要求输入App所有者的帐号和密码:
Getting file list... Email: <admin-id> @example.com #输入帐号(邮箱) Password for <admin-id> @example.com: #输入密码 Fetching files... Getting files... [ 1/5 ] request.py [ 2/5 ] login.py [ 3/5] static/ screen.css [ 4/5] static/ print .css [ 5/5] images/bird.png
你可以在GAE App控制台点击Versions,在出现的页面中选择 permanently prohibit code downloads。 [注意] 这个步骤是不可逆的,一旦选择永久禁止代码下载,则永远不能再下载这个应用的源代码了。
关于下载GAE High Replication Datastore数据[实战篇]下
关于下载GAE High Replication Datastore数据[实战篇]上
标签: python , GAE
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于关于下载GAE High Replication Datastore数据的详细内容...