python中的谷歌云函数读取firebase实时数据

gbo*_*ine 6 python firebase firebase-realtime-database google-cloud-functions

我正在编写一个简单的谷歌云函数来学习,使用新的 Python3.7 选项,我想读/写一些数据到 Firebase 实时数据库。

我找到了一些可以使用 Firestore 的信息,但现在我需要使用实时数据库。

# global
import firebase_admin

from firebase_admin import db
# from firebase_admin import firestore

default_app = firebase_admin.initialize_app()

def check_prices_updates(request):
"""Responds to any HTTP request.
Args:
    request (flask.Request): HTTP request object.
Returns:
    The response text or any set of values that can be turned into a
    Response object using
    make_response 
"""

collection = 'pricelist'
mybase = db.reference(collection)

   ....[other code]

return "OK"
Run Code Online (Sandbox Code Playgroud)

这是我的代码的摘录,文档说initialize_app()必须将其留空以收集项目默认凭据。

我调用 db.reference(collection) 的行给了我一个例外:

ValueError:无效的 databaseURL 选项:“无”。databaseURL 必须是非空 URL 字符串。

好像配置参数没有显示请求的键“databaseURL”。以 Firestore 为例,我可以firestore.client()在从 firebase_admin 导入后调用,在 requirements.txt 中添加“google-cloud-firestore”。

现在,对于 firebase,我应该修复什么才能在 db 上读写?

附注。在我的数据库上,“.read”规则对所有人都是正确的,所以我在身份验证方面没有问题!

更新: 睡个好觉后,我意识到要访问实时数据库,我需要将一些选项传递给 initialize_app,如下所示:

firebase_admin.initialize_app(options={'databaseURL': 'https://[PROJECT-NAME].firebaseio.com'})
Run Code Online (Sandbox Code Playgroud)

干杯

小智 0

启动 Firebase Admin SDK

  • 这将访问数据库,即使您对读、写设置权限限制,因为您的 python 将具有管理员访问权限
  • 如果您有多个数据库实例(仅适用于 blaze 计划)
  • 在单个 python 脚本中使用不同的应用程序名称初始化它们
#Firebase Admin Imports
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db

#Firebase admin sdk Key - Save it as secret
firebaseval={
  "type": "service_account",
  "project_id": "<project_id>",
  "private_key_id": "<private_key>",
  "private_key": "-----BEGIN PRIVATE KEY--xxxxxxxxxxxxxxxxxxxxxxxxxx\n-----END PRIVATE KEY-----\n",
  "client_email": "firebase-adminsdk-ipcf5@<project_id>.iam.gserviceaccount.com",
  "client_id": "<clinet_id>",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-ipcf5%40<project_id>.iam.gserviceaccount.com"
}

cred = credentials.Certificate(firebaseval)

print("\n---------------------------")
print("Initialising Firebase...")

#Initilising Database 1- fetching stock and option details
firebase_admin.initialize_app(cred, {
    'databaseURL' : 'https://<project_id>-<instance_id1>.firebaseio.com/'
})

# Initilising Database 2- Different instance ID
app2 = firebase_admin.initialize_app(cred, {
    'databaseURL': 'https://<project_id>-<instance_id2>..firebaseio.com/'
}, name='app2')

# Initilising Database 3- Different instance ID
app3 = firebase_admin.initialize_app(cred, {
    'databaseURL': 'https://<project_id>-<instance_id3>..firebaseio.com/'
}, name='app3')

print("Initialised Firebase")
print("---------------------------\n")

Run Code Online (Sandbox Code Playgroud)

访问不同的数据库实例

# database instance_id2
mainref2=db.reference("PATH",app2)  

# database instance_id3
mainref3==db.reference("PATH",app3)


# Reading whole data from 
mainref2.get()

# Reading inside child node from db instance_id2
mainref2.child("child_name").get()

# Setting json data to db instance_id3
mainref3.set({"data":"something"})

Run Code Online (Sandbox Code Playgroud)