我正在尝试通过我的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
不确定我的数据存储库网址是否正确,但是认为我的方法还有其他问题。一些指导将不胜感激。
答案 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。
鉴于您要导出整个数据库,应删除实体过滤器。如果没有实体过滤器,则托管导出将导出您的整个数据库。