创建 FireStore
创建或选择项目 注意:您不能在一个项目中同时使用 Firestore 和 Cloud Datastore,否则可能会影响使用 App Engine 的应用
进入 FireStore 选择数据库服务,此处选择原生模式。
选择 FireStore 位置,这里选择离客户近的。
创建数据库
设置身份认证
此处选择使用命令行 Cloud Shell,例如:
创建服务账号
gcloud iam service-accounts create [NAME]
例如:
gcloud iam service-accounts create firestore-test
向服务账号授予权限
gcloud projects add-iam-policy-binding [PROJECT_ID] --member "serviceAccount:[NAME]@[PROJECT_ID].iam.gserviceaccount.com" --role "roles/owner"
例如:
gcloud projects add-iam-policy-binding firestore-test-286306 --member "serviceAccount:firestore-test@firestore-test-286306.iam.gserviceaccount.com" --role "roles/owner"
上述代码为刚才创建的服务账号,firestore 授予了资源 owner 权限,正式开发时,需要对此权限进行细化。 注:上述的 [PROJECT_ID] 对应项目ID,在创建选择项目时可以看到。
生成密钥文件
gcloud iam service-accounts keys create [FILE_NAME].json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com
例如:
gcloud iam service-accounts keys create serives.json --iam-account firestore-test@firestore-test-286306.iam.gserviceaccount.com
成功设置结果在 Cloud Shell 中返回如下相似内容:
created key [***] of type [json] as [serives.json] for [firestore-test@firestore-test-286306.iam.gserviceaccount.com]
通过设置环境变量 GOOGLE_APPLICATION_CREDENTIALS 向应用代码提供身份验证凭据(当然也可以在代码中特殊指定。)
export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
例如:
export GOOGLE_APPLICATION_CREDENTIALS="./serives.json"
初始化 FireStore
安装更新 google-cloud-firestore
pip3 install --upgrade google-cloud-firestore
from google.cloud import firestore
# Project ID is determined by the GCLOUD_PROJECT environment variable
db = firestore.Client()
示例:
bjzws1994@cloudshell:~ (firestore-test-286306)$ ipython3
Python 3.7.3 (default, Jul 25 2020, 13:03:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.17.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from google.cloud import firestore
...:
...: # Project ID is determined by the GCLOUD_PROJECT environment variable
...: db = firestore.Client()
In [2]: db
Out[2]: <google.cloud.firestore_v1.client.Client at 0x7fbdd3869588>
In [3]: dir(db)
Out[3]:
['SCOPE',
'_SET_PROJECT',
'__class__',
'__delattr__',
'__dict__',
...
In [4]: db.project
Out[4]: 'firestore-test-286306'
添加数据
Firestore 将数据存储在文档中,而文档存储在集合中。在首次向文档添加数据时,Firestore 就会隐式创建集合和文档,而不需要显式创建集合或文档。
doc_ref = db.collection(u'users').document(u'alovelace')
doc_ref.set({
u'first': u'Ada',
u'last': u'Lovelace',
u'born': 1815
})
示例:
In [5]: doc_ref = db.collection(u'users').document(u'alovelace')
...: doc_ref.set({
...: u'first': u'Ada',
...: u'last': u'Lovelace',
...: u'born': 1815
...: })
...:
Out[5]:
update_time {
seconds: 1597301218
nanos: 968333000
}
将另一个文档添加到 users 集合中。请注意,此文档包含第一个文档中没有的一个键值对(中间名)。集合中的文档可以包含不同的信息集。
doc_ref = db.collection(u'users').document(u'aturing')
doc_ref.set({
u'first': u'Alan',
u'middle': u'Mathison',
u'last': u'Turing',
u'born': 1912
})
也可以使用 GCP consle 创建集合&文档,如下图所示:
添加完后的情况
可以看到,包括我们手动上传的数据,和通过 python 添加的数据,都显示了出来,并在一个集合下。
读取数据
此时已经创建完集合、文档,可以在后台进行查看。
也可以使用 get 方法来检索整个集合。
users_ref = db.collection(u'users')
docs = users_ref.stream()
for doc in docs:
print(f'{doc.id} => {doc.to_dict()}')
示例:
In [7]: users_ref = db.collection(u'users')
...: docs = users_ref.stream()
...:
...: for doc in docs:
...: print(f'{doc.id} => {doc.to_dict()}')
...:
alovelace => {'born': 1815, 'last': 'Lovelace', 'first': 'Ada'}
aturing => {'middle': 'Mathison', 'first': 'Alan', 'last': 'Turing', 'born': 1912}
如下图所示,此时 GCP console 中已经可以通过 useage 查看写入情况了。