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

閱讀時間約 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:




11會員
84內容數
漫步,悠閒自在的隨意行走!是行為,是態度,也是一種境界,存在於得勝的王者。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
迎新活動「方格新手村」:新格友註冊加入方格子,知名日料吃到飽餐券送給你! 👉 還不是 vocus 的會員嗎?點此註冊,參與新手村活動 👈 近期站上也出現了不少新格友,為了歡迎各位的加入,「方格新手村」隨之登場! 即日起,只要是新註冊帳號於活動期間內發佈 3 則文章,就有機會抽獎獲得知名日料吃到飽餐券。原格友也可以一起同樂,我們準備了小任
Thumbnail
2024-06-21
閱讀心得:展現自我的生活態度|成熟大人的說話課我們每天都在說話,但說出的話合適嗎? Sunny最近讀完一本有關溝通的書籍。 這是由世紀奧美公關的創辦人「丁菱娟」所寫的書,書的全名《丁菱娟的成熟大人說話課:如何說,才能得體又不傷人?反擊時,如何堅定又有力量?任何情境都可用的38個溝通之道》。 會找這本書來看,主要是因為Sunny 近期發
Thumbnail
2024-07-10
防曬產品係數測試報告彙整(2024年)從2014年起,自己對於市售防曬產品的效能產生了濃厚的興趣。因為當時候發現不少產品的防曬係數其實標示是有問題的,像是原本應該是人體測試的SPF與PA數值,實際上沒有做,只用機器測試的數據來充當,但這兩者卻有很大的差異。像是防曬係數其實有強度、廣度與平均度三個面向需要一起判斷,但多數廠商並沒有完整標示
Thumbnail
【語音筆記術:用語音筆記可以為你克服職業生涯的3大挑戰】我在【語音筆記術:解鎖高效率,3個使用語音產生素材的創作模式】提到用語音筆記可以為你收集素材,滿足工作與生活中的溝通需求。 活用語音筆記,其實進一步可以幫助你克服這3大工作中的挑戰: 挑戰1 - 快速記錄與整理想法 當你在工作與家庭上的責任愈來愈多, 快速紀錄與整理想法,就是每天會大量重複的
Thumbnail
2023-12-13
閱讀筆記《大腦減壓的子彈筆記術:用Evernote打造快狠準任務整理系統》|提高生產力吧在發想新願望前,先為自己建立一套真正可以實現計畫的系統! 其實,成為高效率工作者,比你想像得簡單很多。 讓雜事回歸他們應該在的位置, 讓目標走上他們應該去的道路, 讓自己找到專注、熱情與行動力! 用最強數位筆記工具,完成最高效率子彈任務整理。
Thumbnail
2023-11-28
【子彈筆記四年級生】運用子彈筆記術寫下My Story人生回憶錄最近閱讀了由日本作者大住力寫的100年人生規劃曆,得到很多感觸跟啟發!明明才閱讀到一半而已,就有股衝動想要立刻做一本屬於自己的人生手札,可見這本書的影響力有多強大!書本內容主要分享,如何從自己出生日到生命盡頭,用可視化的人生時鐘來規劃未來可運用的時間。
Thumbnail
2023-10-02
技術分享: 區塊鏈普及可能比你想像來的快! 一個邁向10億級用戶入口的關鍵!ERC-4337 V神在2022的Bankless訪談中曾提到三個未來的巨大機遇,分別是錢包普及化、抗通膨穩定幣以及以太坊登入,其中錢包普及化將會是一個面向十億人的一個巨大商機! 如果未來你只需要一間銀行就可以在全世界消費、轉錢,不限金額即時到帳且手續費極低或不需要,甚至還有相對應的安全措施讓你錢包不見也不用擔心被盜
Thumbnail
2023-08-23
【書選閱讀#074】打造你的知識複利筆記術:卡片盒筆記法的數位應用實戰指南提到「做筆記」你會想到什麼?如果說知識的消化可以分為「輸入、處理和輸出」三個階段,那麼你又認為筆記扮演的任務角色會落到哪一個階段?做筆記只是「輸入」成效不高,想要「輸出」又耗時費力。要如何解決這個問題呢?卡片盒筆記法,就是目前最有效的解方,特別是在數位工具智能化之後,更顯得這套方法的強大。
Thumbnail
2023-08-11
用Google Apps打造個人數位筆記系統因為我所有時間管理的出發點是來自於Google Calendar,所以就興起了用Google Calendar來建立自己筆記系統的想法,搭配Google生態系產品構成來我從目標管理、提醒工具、筆記寫作到個人資產規劃等完整應用。
Thumbnail
2023-02-15
Obsidian知識彙整術:教你如何運用Obsidian建立架構式筆記擴大你的知識力本篇我將以筆記軟體Obsidian為重點,分享我如何透過Obsidian整理資訊,並撰寫文章,架構自己的資料庫。
Thumbnail
2022-10-25
筆記思考術--如何用來改善現狀?       電腦玩物站長在他的筆記思考術這本書中,提到了如何縮減通勤時間這件事。因為有了小孩,所以本來從基隆坐車到台北通勤,演變為要開車先送老婆去上班,再到自己公司的塞車族(不能兩人都搭車嗎?)。本來塞車就是要認命的事,因為大家都在上班時間準備開車到公司,躲都躲不掉,這是全世
Thumbnail
2020-12-05
Notion #1|因為用了Notion,我有股衝動準備要把大多數的筆記APP刪除了!在我接觸Notion 三天之後,我斷然決定!往後大部分的作業都將利用Notion完成了
Thumbnail
2019-10-14