zoukankan      html  css  js  c++  java
  • 关于下载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中又包括以下内容:

    1. connector:用来指定输入输出格式,值为xml,csv或文本。
    2. connector_options:connector的一些属性。
    3. 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。[注意]这个步骤是不可逆的,一旦选择永久禁止代码下载,则永远不能再下载这个应用的源代码了。

     
    iFantasticMe 2013-04-14 18:48 阅读:217 评论:0
     
    iFantasticMe 2013-04-14 00:06 阅读:11 评论:0
     
     
    标签: pythonGAE
  • 相关阅读:
    vue.js 首屏优化
    ios判断是否有中文
    ios 7新特性
    NSDictionary的分类
    asiHttpRequst 超时代码判断
    ios中layoutsubview何时被调用
    ios中tableview的移动添加删除
    ios发布
    新浪博客中放大图片的做法
    ios中coredata
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3021172.html
Copyright © 2011-2022 走看看