我想将google云数据存储模拟器用于本地项目。我已经安装并运行了模拟器:
gcloud beta emulators datastore start
我的应用程序连接到它,但问题是我不知道如何填充实体,因为没有用户界面,我的应用程序需要一些管理员用户在场。
我还尝试使用以下命令导出生产数据库(数据存储区):
gcloud datastore export
但无法使其发挥作用。
我应该编写一个以编程方式填充数据库的独立js / python脚本吗?
请告知
答案 0 :(得分:4)
模拟器创建一个"数据存储区"在本地计算机上工作,基本上模拟了行为,就好像它是Google Cloud 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.使用相同的the Local Development Server运行remote_api repo than before。当你运行它时,你会看到类似的东西:
启动API服务器
在以下步骤中使用此最后一个端口(39693)
5.运行以下命令:
appcfg.py --url=http://localhost:39693/_ah/remote_api/ --filename=data.csv upload_data
在最后一步中,您实际执行的操作如下:您正在将data.csv上传到在本地运行的应用程序。考虑到您还在运行数据存储模拟器,您在本地运行的应用程序已连接到它,因此您需要将data.csv上传到本地数据存储区。