技術筆記-用 python 操作 google firestore 的基本方法

更新於 2023/12/27閱讀時間約 5 分鐘

1.安裝與初始化

firestore 是 google 所提供的雲端文件式資料庫服務,為各種開發工具提供了方便使用的 sdk,python 的套件名稱為 firebase-admin,用 pip 安裝後就可操作了。

pip install firebase-admin

這種安裝套件的工作只需要在專案開發初期執行一次,之後一段時間就忘了它的存在了,非常需要記錄起來。

以下程式執行初始化和授權,放在模組開頭:

import firebase_admin
import firebase_admin.firestore

cred = firebase_admin.credentials.Certificate(
'newservice/firestoreServiceAccountKey.json')
fireApp = firebase_admin.initialize_app(cred)
dbClient = firebase_admin.firestore.client()

其中「授權」的程序也是很容易忘記的,又耗費了許多力氣去回想,必須在 google cloud console IAM 管理介面,新增 service account,並匯出私鑰檔案 (xxx.json) 存在專案目錄備用,參閱「quick start」文件。

2.讀取資料

可先用 google 提供的管理介面手動新增一些資料測試使用,介面功能非常簡單直覺:

raw-image


已知 collection 和 document id,可用三行取得資料:

symbolsRef = dbClient.collection(u'symbols')
docRef = symbolsRef.document('6533.TW')
obj = docRef.get().to_dict()

# 若要檢查資料存不存在,可用以下判斷式,讓流程嚴謹,避免程式錯誤跳開。
if docRef.get().exists:
obj = docRef.get().to_dict()

取得整個 collection

objs = []
for docRef in symbolsRef.stream(): # symbolsRef.get() 也可以
objs.append(docRef.to_dict())
objs

加上一些查詢條件,或是排序

symbolsRef = dbClient.collection(u'symbols')
queryRef = symbolsRef.where("symbol", "==", "6533.TW")
objs = []
for docRef in queryRef.get():
objs.append(docRef.to_dict())
objs​

# order 的寫法如下,正序倒序,取前面幾筆或後面幾筆都沒問題
​queryRef = symbolsRef.order_by('symbol',
direction = firebase_admin.firestore.Query.DESCENDING).limit(1)
queryRef = alertRef.order_by('alertId').limit_to_last(1)

3.修改資料

已知 collection 和 document id,要把 field1 欄位值修改成 value1,也只要三行,若 field1 不存在也沒關係,該筆資料會新增此欄位;另外也可一次傳入多欄位。

symbolsRef = dbClient.collection(u'symbols')
docRef = symbolsRef.document('6533.TW')
docRef.update({'filed1':'value1'})


4.刪除資料

# 刪除文件
symbolsRef = dbClient.collection(u'symbols')
docRef = symbolsRef.document('6533.TW')
docRef.delete()

# 只刪除文件中的某個欄位
​docRef.update({'filed1':firestore.DELETE_FIELD})


5.建立資料

# 新增一筆資料,由系統自動賦予 id
symbolsRef = dbClient.collection(u'symbols')
symbolsRef.add({'field1': 'value1'})

# 新增一筆資料,由程式指定 id,則要用 set 方法
# 若該 id 的文件已經存在,則整筆資料將被取代
symbolsRef = dbClient.collection(u'symbols')
symbolsRef.document('id1').set({'field1': 'value1'})


by Newman 2023/12/26

導覽頁:紐曼的技術筆記-索引

References:




avatar-img
22會員
104內容數
漫步是一種境界。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
newman的沙龍 的其他內容
安裝完成 nodejs 後選用一個工作目錄執行 npm init,npm 會產生一個 package.json 檔案,之後為此專案安裝套件時都會記錄在此,讓專案可以很容易的重建和移植,也可設定 npm start 執行時以哪一個 js 檔當作系統入口。直接開寫了,以下我用 app.js 當作系統入口
首先安裝 python,依照 官網 的指示,下載正確的版本並執行就可,重點在以下。 虛擬環境的管理平台許多人使用 anaconda,許多教 python 的課程第一堂就是不管三七二十一先安裝再說,但我用了一陣子之後覺得它實在太笨重了,早有掙脫的想法,欣見原生的 python 已經具有虛擬環境管理模
安裝完成 nodejs 後選用一個工作目錄執行 npm init,npm 會產生一個 package.json 檔案,之後為此專案安裝套件時都會記錄在此,讓專案可以很容易的重建和移植,也可設定 npm start 執行時以哪一個 js 檔當作系統入口。直接開寫了,以下我用 app.js 當作系統入口
首先安裝 python,依照 官網 的指示,下載正確的版本並執行就可,重點在以下。 虛擬環境的管理平台許多人使用 anaconda,許多教 python 的課程第一堂就是不管三七二十一先安裝再說,但我用了一陣子之後覺得它實在太笨重了,早有掙脫的想法,欣見原生的 python 已經具有虛擬環境管理模
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
我在【語音筆記術:解鎖高效率,3個使用語音產生素材的創作模式】提到用語音筆記可以為你收集素材,滿足工作與生活中的溝通需求。 活用語音筆記,其實進一步可以幫助你克服這3大工作中的挑戰: 挑戰1 - 快速記錄與整理想法 當你在工作與家庭上的責任愈來愈多, 快速紀錄與整理想法,就是每天會大量重複的
Thumbnail
在發想新願望前,先為自己建立一套真正可以實現計畫的系統! 其實,成為高效率工作者,比你想像得簡單很多。 讓雜事回歸他們應該在的位置, 讓目標走上他們應該去的道路, 讓自己找到專注、熱情與行動力! 用最強數位筆記工具,完成最高效率子彈任務整理。
Thumbnail
最近閱讀了由日本作者大住力寫的100年人生規劃曆,得到很多感觸跟啟發!明明才閱讀到一半而已,就有股衝動想要立刻做一本屬於自己的人生手札,可見這本書的影響力有多強大!書本內容主要分享,如何從自己出生日到生命盡頭,用可視化的人生時鐘來規劃未來可運用的時間。
Thumbnail
V神在2022的Bankless訪談中曾提到三個未來的巨大機遇,分別是錢包普及化、抗通膨穩定幣以及以太坊登入,其中錢包普及化將會是一個面向十億人的一個巨大商機! 如果未來你只需要一間銀行就可以在全世界消費、轉錢,不限金額即時到帳且手續費極低或不需要,甚至還有相對應的安全措施讓你錢包不見也不用擔心被盜
Thumbnail
提到「做筆記」你會想到什麼?如果說知識的消化可以分為「輸入、處理和輸出」三個階段,那麼你又認為筆記扮演的任務角色會落到哪一個階段?做筆記只是「輸入」成效不高,想要「輸出」又耗時費力。要如何解決這個問題呢?卡片盒筆記法,就是目前最有效的解方,特別是在數位工具智能化之後,更顯得這套方法的強大。
Thumbnail
因為我所有時間管理的出發點是來自於Google Calendar,所以就興起了用Google Calendar來建立自己筆記系統的想法,搭配Google生態系產品構成來我從目標管理、提醒工具、筆記寫作到個人資產規劃等完整應用。
Thumbnail
本篇我將以筆記軟體Obsidian為重點,分享我如何透過Obsidian整理資訊,並撰寫文章,架構自己的資料庫。
Thumbnail
       電腦玩物站長在他的筆記思考術這本書中,提到了如何縮減通勤時間這件事。因為有了小孩,所以本來從基隆坐車到台北通勤,演變為要開車先送老婆去上班,再到自己公司的塞車族(不能兩人都搭車嗎?)。本來塞車就是要認命的事,因為大家都在上班時間準備開車到公司,躲都躲不掉,這是全世
Thumbnail
在我接觸Notion 三天之後,我斷然決定!往後大部分的作業都將利用Notion完成了
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
我在【語音筆記術:解鎖高效率,3個使用語音產生素材的創作模式】提到用語音筆記可以為你收集素材,滿足工作與生活中的溝通需求。 活用語音筆記,其實進一步可以幫助你克服這3大工作中的挑戰: 挑戰1 - 快速記錄與整理想法 當你在工作與家庭上的責任愈來愈多, 快速紀錄與整理想法,就是每天會大量重複的
Thumbnail
在發想新願望前,先為自己建立一套真正可以實現計畫的系統! 其實,成為高效率工作者,比你想像得簡單很多。 讓雜事回歸他們應該在的位置, 讓目標走上他們應該去的道路, 讓自己找到專注、熱情與行動力! 用最強數位筆記工具,完成最高效率子彈任務整理。
Thumbnail
最近閱讀了由日本作者大住力寫的100年人生規劃曆,得到很多感觸跟啟發!明明才閱讀到一半而已,就有股衝動想要立刻做一本屬於自己的人生手札,可見這本書的影響力有多強大!書本內容主要分享,如何從自己出生日到生命盡頭,用可視化的人生時鐘來規劃未來可運用的時間。
Thumbnail
V神在2022的Bankless訪談中曾提到三個未來的巨大機遇,分別是錢包普及化、抗通膨穩定幣以及以太坊登入,其中錢包普及化將會是一個面向十億人的一個巨大商機! 如果未來你只需要一間銀行就可以在全世界消費、轉錢,不限金額即時到帳且手續費極低或不需要,甚至還有相對應的安全措施讓你錢包不見也不用擔心被盜
Thumbnail
提到「做筆記」你會想到什麼?如果說知識的消化可以分為「輸入、處理和輸出」三個階段,那麼你又認為筆記扮演的任務角色會落到哪一個階段?做筆記只是「輸入」成效不高,想要「輸出」又耗時費力。要如何解決這個問題呢?卡片盒筆記法,就是目前最有效的解方,特別是在數位工具智能化之後,更顯得這套方法的強大。
Thumbnail
因為我所有時間管理的出發點是來自於Google Calendar,所以就興起了用Google Calendar來建立自己筆記系統的想法,搭配Google生態系產品構成來我從目標管理、提醒工具、筆記寫作到個人資產規劃等完整應用。
Thumbnail
本篇我將以筆記軟體Obsidian為重點,分享我如何透過Obsidian整理資訊,並撰寫文章,架構自己的資料庫。
Thumbnail
       電腦玩物站長在他的筆記思考術這本書中,提到了如何縮減通勤時間這件事。因為有了小孩,所以本來從基隆坐車到台北通勤,演變為要開車先送老婆去上班,再到自己公司的塞車族(不能兩人都搭車嗎?)。本來塞車就是要認命的事,因為大家都在上班時間準備開車到公司,躲都躲不掉,這是全世
Thumbnail
在我接觸Notion 三天之後,我斷然決定!往後大部分的作業都將利用Notion完成了