Python:在谷歌云数据存储模拟器中保存数据

Posted

技术标签:

【中文标题】Python:在谷歌云数据存储模拟器中保存数据【英文标题】:Python: Save data in google cloud datastore emulator 【发布时间】:2017-10-18 11:15:09 【问题描述】:

我正在尝试在本地测试 google 的云数据存储。我的测试步骤是:

    使用 Scrapy 抓取数据 使用本地模拟器将数据保存到云数据存储中

为了使用本地模拟器,我按照所有步骤操作

    启动本地模拟器:gcloud beta emulators datastore start 设置本地环境变量:gcloud beta emulators datastore env-init

然而,在python中,当使用以下命令访问云数据存储时,它总是将数据直接保存到谷歌云而不是保存到本地模拟器

#Imports the Google Cloud client library
from google.cloud import datastore

# Instantiates a client
datastore_client = datastore.Client()

sample_entry = some_data

# Saves the entity
datastore_client.put(sample_entry)

您似乎无法指定库以使用本地数据存储模拟器,就像他们在 Node.js 客户端中提供的那样

var datastore = gcloud.datastore(
        apiEndpoint: "http://localhost:8380"
);

我的问题是,如何让谷歌云数据存储python库使用本地模拟器而不是直接使用云

【问题讨论】:

调用env-init后,DATASTORE_EMULATOR_HOST环境变量的值是多少? 虽然我一直是本地测试和开发服务的一员,但 Google Cloud 环境非常复杂,我绝对不建议使用他们的平台仿真包。像这样的 Bug,以及与实际部署环境的行为不一致,让人头疼,不值得拥有;除非有你不能这样做的原因,否则我建议只在云环境中使用暂存项目。 可能,您可能需要按照此处给出的步骤仔细检查您的模拟器设置:cloud.google.com/datastore/docs/tools/datastore-emulator 不确定这是否对您有帮助:github.com/GoogleCloudPlatform/google-cloud-python/issues/1837 【参考方案1】:

你需要eval $(gcloud beta emulators datastore env-init)

gcloud beta emulators datastore env-init 只打印设置必要环境变量的命令。

【讨论】:

【参考方案2】:

你可以试试

if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
  # Production
else:
  # Local development server

你可以在这里关注更多,https://cloud.google.com/appengine/docs/standard/python/tools/using-local-server

【讨论】:

以上是关于Python:在谷歌云数据存储模拟器中保存数据的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery 如何使用存储在谷歌云中的数据?

如何在谷歌云存储中启用实时对象访问分析?

使用 python 在谷歌云存储桶中创建文件夹

类似运营商在谷歌云数据存储区中搜索列的替代方式[重复]

在谷歌云上创建集群

如何在谷歌大查询中从谷歌云存储上传表格