Google app engine 如何解包Google AppEngine批量下载程序编写的sqlite3数据库

Google app engine 如何解包Google AppEngine批量下载程序编写的sqlite3数据库,google-app-engine,Google App Engine,我需要下载应用程序数据存储中相当大(多GB)实体的所有实例。我有足够的磁盘空间来存储实体的数据,但不足以存储批量下载程序作为SQLite数据库检索的原始数据和下载程序在应用我的bulkloader.yaml文件中指定的转换后写入的数据的处理版本。有鉴于此,我相当肯定批量下载操作将成功检索SQLite数据库,然后在尝试应用转换时失败 这可能没问题,因为有另一个系统可用,我可以将SQLite数据库移动到该系统中,并将其解压缩。(我可以使用的另一个系统安装了Python,但没有支持AppEngine工

我需要下载应用程序数据存储中相当大(多GB)实体的所有实例。我有足够的磁盘空间来存储实体的数据,但不足以存储批量下载程序作为SQLite数据库检索的原始数据和下载程序在应用我的bulkloader.yaml文件中指定的转换后写入的数据的处理版本。有鉴于此,我相当肯定批量下载操作将成功检索SQLite数据库,然后在尝试应用转换时失败

这可能没问题,因为有另一个系统可用,我可以将SQLite数据库移动到该系统中,并将其解压缩。(我可以使用的另一个系统安装了Python,但没有支持AppEngine工具的版本——我没有在该机器上升级Python的权限——因此我无法直接在那里进行批量下载。)如果我可以编写一些Python代码来加载SQLite数据库并读取其结果表,我就可以检索到所需的数据,但我无法理解如何利用SQLite数据——当我使用SQLite模块连接到数据库并解压缩表中的行时,除了我感兴趣的数据之外,它们似乎还包含元数据(我的AppEngine应用程序实际放置在数据存储中的数据)


我知道appcfg.py批量下载过程可以读取这些数据,因为它可以按照我在bulkloader.yaml中指定的方式转换数据,但我还没有找到进行此解包的AppEngine工具包代码。请提供任何帮助或指针。

实体作为编码协议缓冲区存储在下载的SQLite数据库中s(与它们存储在生产环境和其他任何地方相同,简而言之,实体是一个编码的PB)。您可以使用SDK代码对实体进行解码(
db.proto_to_entity()
etc),自己读取它们,但设置所有内容需要一些工作


相关代码是-您可能可以将其与bulkloader的其他部分一起重用,以使您的工作更轻松。

以下是适用于我的代码:

import sqlite3;
from google.appengine.datastore import entity_pb
from google.appengine.api import datastore

conn = sqlite3.connect('UserRecord.db', isolation_level=None)
cursor = conn.cursor()
cursor.execute('select id, value from result order by sort_key, id')
for unused_entity_id, entity in cursor:
    entity_proto = entity_pb.EntityProto(contents=entity)
    print datastore.Entity._FromPb(entity_proto)

谢谢——这就是我一直在寻找的指针。了解这些缓冲区的解包不是一件小事,但可以使用bulkloader.py中的代码来完成这一点很有帮助。(顺便说一句,我没有找到proto_to_entity()方法;不确定您是否指的是RestoreLoader。_translate_entity_proto(),或者我是否误解了什么。)不幸的是,正如您所指出的,设置这个模型的工作量将超过我目前的时间。我想我已经找到了一个解决办法,那就是访问目标机器上足够的磁盘空间,以便工具可以为我进行转换。@JP所讨论的方法实际上是
protobuf_to_model
,从这里开始:-很抱歉误导您不过,让电脑拥有更多存储空间似乎是一个简单得多的答案。