模拟器会在您的本地机器上创建一个“Datastore”,它基本上模拟了行为,就好像它是 Google Cloud Datastore 本身一样。
因此,如果您已经在运行模拟器并且您的应用连接到它,只需使用连接到 Datastore 的任何脚本,您就可以执行任何读/写操作。所以举个例子,如果你使用这个python-datastore github repo:
代码在每个“用户的 ip”和“时间戳”访问您的应用时插入实体,然后查询最近 10 次访问:
entity = datastore.Entity(key=ds.key('visit'))
entity.update({
'user_ip': user_ip,
'timestamp': datetime.datetime.utcnow()
})
ds.put(entity)
query = ds.query(kind='visit', order=('-timestamp',))
results = [
'Time: {timestamp} Addr: {user_ip}'.format(**x)
for x in query.fetch(limit=10)]
output = 'Last 10 visits:\n{}'.format('\n'.join(results))
因此,如果您使用模拟器运行您的应用程序,这些所有实体都将插入本地并从那里查询。如果你停止模拟器然后再次运行它,你会看到类似:
重用 [/tmp/tmp.(whatever)/emulators/datastore] 中的现有数据
所以你将能够继续使用相同的数据,除非你删除它或更改模拟器的数据目录changing the --data-dir flag
如果你运行以下命令:
gcloud 数据存储导出
First of all you are missing the OUTPUT_URL_PREFIX;您的数据存储将被导出到哪里。其次,此命令尚不具备与本地数据存储一起使用的功能:您可以看到以下public issue tracker 已被请求的位置。
如您在the answer and edit by @Olivier.Roger and @stanzheng in the following thread 中所见,有一种方法可以将您的生产数据存储导出到本地数据存储。您必须按照以下步骤操作:
1.部署一些使用remote_api运行的应用程序。例如this repo 是一种直截了当的方式。
2.运行此命令将生产中的数据存储下载到文件 data.csv:
appcfg.py download_data -A YOUR_APP_NAME --url=http://YOUR_APP_NAME.appspot.com/_ah/remote_api/ --filename=data.csv
3.启动数据存储模拟器:
gcloud beta emulators datastore start
4. 使用相同的remote_api repo than before 运行the Local Development Server。当你运行它时,你会看到类似的东西:
启动 API 服务器:http://0.0.0.0:39693
在接下来的步骤中使用最后一个端口(39693)
5.运行以下命令:
appcfg.py --url=http://localhost:39693/_ah/remote_api/ --filename=data.csv upload_data
在最后一步中,您实际上正在执行以下操作:您正在将 data.csv 上传到在本地运行的应用程序。考虑到您也在运行数据存储模拟器,您在本地运行的应用程序已连接到它,因此您将 data.csv 上传到本地数据存储。