使用python检测Firebase实时数据库中的更改

问题描述

在这样的服务器上以24/7方式运行一些python代码

firebase = pyrebase.initialize_app(config)
db = firebase.database()
while True:
        result = db.child("imgPostStatus").get()

        isImagetoScan = None

        for elements in result.each():
            isImagetoScan = elements.val()
        if isImagetoScan:
            #perform the rest of the code
            #set isImagetoScan to false in the DB

上面的代码不断地从数据库获取数据,并且仅在isImagetoScan为true时运行其余代码。有没有一种方法可以添加一个侦听器,以便在数据库中的值发生更改时触发代码,而不是像这样一遍又一遍地手动遍历循环?

用户here似乎已使用REST API解决了此问题,我对REST API并不熟悉。如果本文中提到的方法是正确的解决方案,该如何在代码中实现呢?

解决方法

您的代码使用get,它将获取数据并立即继续

收听获取数据,请遵循streaming updates上的文档。从那里:

def stream_handler(message):
    print(message["event"]) # put
    print(message["path"]) # /-K7yGTTEp7O549EzTYtI
    print(message["data"]) # {'title': 'Pyrebase',"body": "etc..."}

my_stream = db.child("posts").stream(stream_handler)

这将打开一个SSE连接,并通过HTTP发送更新。


请注意,Firebase也有一个Admin SDK for Python,它也支持通过其listen method进行流式更新。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...