执行数据存储备份到云存储

时间:2019-04-17 11:02:35

标签: python python-3.x google-cloud-datastore google-cloud-storage urllib

我正在尝试通过我的Python Flask应用程序(Python 3)创建数据存储的预定备份到云存储。我对它的调度方面感到满意,但是在导出方面遇到了困难。

我以https://cloud.google.com/datastore/docs/schedule-export作为起点,但它引用了

from google.appengine.api import urlfetch

不再受支持。我一直在研究urllib

import urllib.request

url = 'https://datastore.googleapis.com/v1/projects/application-name-placeholder'
timestamp = datetime.datetime.now().strftime('%Y%m%d-%H%M%S')
output_url_prefix = 'gs://datastore-backup-test-name-placeholder/example'


query = client.query(kind='__kind__')
query.keys_only()
kinds = [entity.key.id_or_name for entity in query.fetch()]

query = client.query(kind='__namespace__')
query.keys_only()
all_namespaces = [entity.key.id_or_name for entity in query.fetch()]

entity_filter = {
    'kinds': kinds,
    'namespace_ids': all_namespaces
}
request = {
    'project_id': 'application-name-placeholder',
    'output_url_prefix': output_url_prefix,
    'entity_filter': entity_filter
}

headers = {
    'Content-Type': 'application/json'
}
response = urllib.request.Request(url)
response.add_header('Content-type', 'application/json')
result = urllib.request.urlopen(response, data=bytes(json.dumps(request), encoding="utf-8"))

此刻我得到

urllib.error.HTTPError: HTTP Error 404: Not Found

不确定我的数据存储库网址是否正确,但是认为我的方法还有其他问题。一些指导将不胜感激。

1 个答案:

答案 0 :(得分:0)

在您的URL中,您有url = 'https://datastore.googleapis.com/v1/projects/application-name-placeholder',但链接的文档中的url = 'https://datastore.googleapis.com/v1/projects/%s:export' % app_id。您缺少尾随的:export。

鉴于您要导出整个数据库,应删除实体过滤器。如果没有实体过滤器,则托管导出将导出您的整个数据库。