谷歌云数据存储模拟器初始化数据

sas*_*_bg 4 datastore google-cloud-datastore

我想将谷歌云数据存储模拟器用于本地项目。我已经安装并运行了模拟器:

gcloud beta emulators datastore start
Run Code Online (Sandbox Code Playgroud)

我的应用程序连接到它,但问题是我不知道如何用实体填充它,因为没有用户界面,而且我的应用程序需要一些管理员用户存在。

我还尝试使用以下命令导出生产数据库(数据存储):

 gcloud datastore export
Run Code Online (Sandbox Code Playgroud)

但无法使其工作。

我应该编写一个独立的 js/python 脚本来以编程方式填充数据库吗?

请指教

Vic*_*GGl 5

模拟器在您的本地机器上创建一个“数据存储”,它基本上模拟行为,就好像它是 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))
Run Code Online (Sandbox Code Playgroud)

因此,如果您使用模拟器运行您的应用程序,这些所有实体都将插入本地并从那里查询。如果您停止模拟器然后再次运行它,您将看到如下内容:

重用 [/tmp/tmp.(whatever)/emulators/datastore] 中的现有数据

因此您将能够继续使用相同的数据,除非您删除它或更改模拟器的数据目录更改 --data-dir 标志

如果您运行以下命令:

gcloud 数据存储导出

首先,您缺少 OUTPUT_URL_PREFIX;将导出数据存储的位置。其次,此命令尚不具备使用本地数据存储的功能:您可以在已请求的地方看到以下公共问题跟踪器

有一种方法可以将您的生产数据存储区导出到本地数据存储区,正如您在以下线程中@Olivier.Roger 和@stanzheng 的答案和编辑中看到的那样。您必须按照以下步骤操作:

1.使用remote_api部署一些正在运行的应用程序。例如,这个 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
Run Code Online (Sandbox Code Playgroud)

3.启动数据存储模拟器:

gcloud beta emulators datastore start
Run Code Online (Sandbox Code Playgroud)

4.使用之前相同的remote_api repo运行本地开发服务器。当你运行它时,你会看到类似的东西:

启动 API 服务器:http: //0.0.0.0 : 39693

在以下步骤中使用最后一个端口 (39693)

5.运行以下命令:

appcfg.py --url=http://localhost:39693/_ah/remote_api/ --filename=data.csv upload_data
Run Code Online (Sandbox Code Playgroud)

在最后一步中,您实际执行的操作如下:您将 data.csv 上传到您在本地运行的应用程序。考虑到您还运行数据存储模拟器,您在本地运行的应用程序已连接到它,因此您将 data.csv 上传到本地数据存储。