我试图通过我的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
不确定我的数据存储区域是否是正确的方法,但认为我的方法存在其他问题。一些指导意见将不胜感激。
在您的URL中,您有url = 'https://datastore.googleapis.com/v1/projects/application-name-placeholder'
,但链接的文档有url = 'https://datastore.googleapis.com/v1/projects/%s:export' % app_id
。你错过了尾随:export。
鉴于您要尝试导出整个数据库,应删除实体过滤器。如果没有实体过滤器,托管导出将导出整个数据库。