技術筆記-用 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:




留言
avatar-img
留言分享你的想法!
avatar-img
newman的沙龍
25會員
129內容數
漫步是一種境界。
newman的沙龍的其他內容
2025/04/01
Reinforcement Learning (強化學習) 的理論非常有趣,可能是因為其中許多方法,與人類的學習歷程極為相似,如試錯,獎懲,改進策略,持續優化等等。現在準備來爬這座山了,我把學習階段大致分成三個小山峰,依序為 Q-Learning --> DQN --> Actor-Critic,
Thumbnail
2025/04/01
Reinforcement Learning (強化學習) 的理論非常有趣,可能是因為其中許多方法,與人類的學習歷程極為相似,如試錯,獎懲,改進策略,持續優化等等。現在準備來爬這座山了,我把學習階段大致分成三個小山峰,依序為 Q-Learning --> DQN --> Actor-Critic,
Thumbnail
2025/03/08
稍微看一下 Telegram 官方文件,哇!好強喔,功能說明的第一項赫然出現「可以取代整個網站」!口氣真的很大。雖然我的需求應該很低,但能夠確認前面是一座豐富的寶藏,還是很令人興奮的,待基本功能掌握之後,可以再評估和決定要不要往下挖。 發送訊息 要達成這第一個目標,首先必須建立一個 bot。
Thumbnail
2025/03/08
稍微看一下 Telegram 官方文件,哇!好強喔,功能說明的第一項赫然出現「可以取代整個網站」!口氣真的很大。雖然我的需求應該很低,但能夠確認前面是一座豐富的寶藏,還是很令人興奮的,待基本功能掌握之後,可以再評估和決定要不要往下挖。 發送訊息 要達成這第一個目標,首先必須建立一個 bot。
Thumbnail
2025/03/01
Line Notify 即將停止服務,隨著時間越來越緊迫,隱約聽到許多人在哀嚎。印象中有許多廠商,把 Line Notify 用得淋漓盡致,甚至可以一個客戶建一個群組,把許多客製化服務都用程式管理的井井有條,得到很好的滿意度。但這種好康,無限免費的即時訊息,沒有了,時間就在 2025/3/31!公告
Thumbnail
2025/03/01
Line Notify 即將停止服務,隨著時間越來越緊迫,隱約聽到許多人在哀嚎。印象中有許多廠商,把 Line Notify 用得淋漓盡致,甚至可以一個客戶建一個群組,把許多客製化服務都用程式管理的井井有條,得到很好的滿意度。但這種好康,無限免費的即時訊息,沒有了,時間就在 2025/3/31!公告
Thumbnail
看更多
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
在本篇文章中,將會設定 Cloud Run,以便每當將程式修改並推送到 GitHub 時,它都會使用 Cloud Build 自動構建和部署應用程序的最新版本。
Thumbnail
在本篇文章中,將會設定 Cloud Run,以便每當將程式修改並推送到 GitHub 時,它都會使用 Cloud Build 自動構建和部署應用程序的最新版本。
Thumbnail
firestore 是 google 所提供的雲端文件式資料庫服務,為各種開發工具提供了方便使用的 sdk,python 的套件名稱為 firebase-admin,用 pip 安裝後就可操作了。 pip install firebase-admin
Thumbnail
firestore 是 google 所提供的雲端文件式資料庫服務,為各種開發工具提供了方便使用的 sdk,python 的套件名稱為 firebase-admin,用 pip 安裝後就可操作了。 pip install firebase-admin
Thumbnail
首先需要在pubspec.yaml文件中添加依賴。 宣告 SharedPreferences record = await SharedPreferences.getInstance(); 寫入 //字串資料 await record.setString(key, value); //
Thumbnail
首先需要在pubspec.yaml文件中添加依賴。 宣告 SharedPreferences record = await SharedPreferences.getInstance(); 寫入 //字串資料 await record.setString(key, value); //
Thumbnail
👨‍💻 簡介 今天快速介紹一下對檔案的操作所使用的package os,包括檔案和資料夾操作等。 檔案和資料夾操作 os package 可以執行各種檔案和資料夾操作,如建立、讀取、寫入、刪除檔案,以及取得資料夾內容等。
Thumbnail
👨‍💻 簡介 今天快速介紹一下對檔案的操作所使用的package os,包括檔案和資料夾操作等。 檔案和資料夾操作 os package 可以執行各種檔案和資料夾操作,如建立、讀取、寫入、刪除檔案,以及取得資料夾內容等。
Thumbnail
在這一課中,我們將學習如何在Python中使用sqlite3模塊進行基本的資料庫操作。 創建資料庫和表 首先,我們需要創建一個資料庫和一個表。
Thumbnail
在這一課中,我們將學習如何在Python中使用sqlite3模塊進行基本的資料庫操作。 創建資料庫和表 首先,我們需要創建一個資料庫和一個表。
Thumbnail
Firebase 推播訊息 的第二篇文章是在說明當 Firebase 專案建立完成之後,如何利用Nodejs和專案裡的金鑰將message推播出去 本篇會先介紹如何建立一個Nodejs專案,再介紹如何透過程式將訊息推播出去。 首先建立一個sendMsg的資料夾 2. 進入sendMsg 資料夾後執行
Thumbnail
Firebase 推播訊息 的第二篇文章是在說明當 Firebase 專案建立完成之後,如何利用Nodejs和專案裡的金鑰將message推播出去 本篇會先介紹如何建立一個Nodejs專案,再介紹如何透過程式將訊息推播出去。 首先建立一個sendMsg的資料夾 2. 進入sendMsg 資料夾後執行
Thumbnail
Firebase Realtime Database 是一個 NoSQL 即時雲端資料庫,支援多平台(JavaScript SDKs、Android、iOS),可以讓使用者即時取得資料庫的資料。
Thumbnail
Firebase Realtime Database 是一個 NoSQL 即時雲端資料庫,支援多平台(JavaScript SDKs、Android、iOS),可以讓使用者即時取得資料庫的資料。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News