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:在谷歌云数据存储模拟器中保存数据的主要内容,如果未能解决你的问题,请参考以下文章