Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基准流。检索数据访问_Python_Firebase_Pyrebase - Fatal编程技术网

Python 基准流。检索数据访问

Python 基准流。检索数据访问,python,firebase,pyrebase,Python,Firebase,Pyrebase,我试图在我的数据库上使用stream,但似乎我能对检索到的数据做的唯一事情就是在控制台上打印它们。我需要更新一个全局表或将这些数据传递给其他函数,但当我试图调用其他函数或实例化变量pycharm says的“未解析引用”时。是否有方法使用流来更新变量、表等?下面是我使用的函数: def requestHandler(message): print("message type", type(message)) print("message", message) prin

我试图在我的数据库上使用stream,但似乎我能对检索到的数据做的唯一事情就是在控制台上打印它们。我需要更新一个全局表或将这些数据传递给其他函数,但当我试图调用其他函数或实例化变量pycharm says的“未解析引用”时。是否有方法使用流来更新变量、表等?下面是我使用的函数:

 def requestHandler(message):

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


requests_tab = db.child("Data")).stream(requestHandler)
下面您将看到它打印的内容:

message type <class 'dict'>
message {'path': '/', 'data': {'start': '', 'site': '', 'end': '', 'km': '', 'task': '', 'action': '', 'date': '23.02.2019'}, 'event': 'put'}
event put
path /
data {'start': '', 'site': '', 'end': '', 'km': '', 'task': '', 'action': '', 'date': '23.02.2019'}
这就是变化前的资源:

request_tab_type -  <class 'pyrebase.pyrebase.Stream'>
request_tab -  <pyrebase.pyrebase.Stream object at 0x02654F90>
printRequestTab <function RequestScreen.printRequestTab at 0x04B3E7C8>
请求选项卡类型-
“请求”选项卡-
打印请求选项卡
在我调用printRequestTab之后,requests\u选项卡变为空

request_tab_type_stream -  <class 'kivy.properties.ObservableList'>
request_tab_stream -  []
请求\u选项卡\u类型\u流-
请求选项卡流-[]

我现在放弃了。我真的需要一些帮助

确保您可以对任何内容使用流处理程序。请记住,您将回调传递给
pyrbase
,当
pyrbase
检测到注册路径上的更改时,它将被触发

很抱歉,您的代码片段不清楚或不完整

尝试下面的示例,根据您的需要进行调整:

class MyStuffTracker(object):
    """Tracks changes of my stuff in Firebase"""
    _db = pyrebase.initialize_app({
        "apiKey": "YOUR-apiKey",
        "authDomain": "YOUR-authDomain",
        "databaseURL": "YOUR-databaseURL",
        "storageBucket": "YOUR-storageBucket",
        "serviceAccount": "YOUR-serviceAccount",
    }).database()

    my_stuff: List[dict] = None  # In my example my data is a list of some dictionaries

    @property
    def is_ready(self) -> bool:
        """
        Returns:
            bool: True if my stuff is ready for use
        """
        return self.my_stuff is not None

    def stream_handler(self, message):
        print("Got some update from the Firebase")
        # We only care if something changed
        if message["event"] in ("put", "patch"):
            print("Something changed")
            if message["path"] == "/":
                print("Seems like a fresh data or everything have changed, just grab it!")
                self.my_stuff: List[dict] = message["data"]
            else:
                print("Something updated somewhere, I dont't care I just want the latest snapshot of my stuff")
                # Just get whole-data of my stuff and list (second) item of the pyres (that I expect to be a dict)
                self.my_stuff: List[dict] = list(it.item[1] for it in self._db.child("my_stuff").get().pyres)

    def __init__(self) -> None:
        """Start tracking my stuff changes in Firebase"""
        super().__init__()
        self._db.child("my_stuff").stream(self.stream_handler)


tracker = MyStuffTracker()

while not tracker.is_ready:
    pass  # Just wait until the first snapshot of my stuff will be ready

print(f"My stuff is: {tracker.my_stuff}")
在本例中,
mystufTracker
有一个私有的
\u db
一个初始化的Firebase db一个方法
stream\u处理程序
,它只存储新数据,或者在数据内部发生一些嵌套更改时再次拉取数据,以及一个关于如何在数据的第一个快照可用后启动和使用它的基本示例(以避免在初始化之前访问它。)


希望它对你有用。

我已经打印了
请求选项卡的类型,它是
。我将尝试使请求选项卡可打印,然后带着资源返回。好的,我不知道如何处理该流数据。在我看来,目前的编码水平有点太高。
class MyStuffTracker(object):
    """Tracks changes of my stuff in Firebase"""
    _db = pyrebase.initialize_app({
        "apiKey": "YOUR-apiKey",
        "authDomain": "YOUR-authDomain",
        "databaseURL": "YOUR-databaseURL",
        "storageBucket": "YOUR-storageBucket",
        "serviceAccount": "YOUR-serviceAccount",
    }).database()

    my_stuff: List[dict] = None  # In my example my data is a list of some dictionaries

    @property
    def is_ready(self) -> bool:
        """
        Returns:
            bool: True if my stuff is ready for use
        """
        return self.my_stuff is not None

    def stream_handler(self, message):
        print("Got some update from the Firebase")
        # We only care if something changed
        if message["event"] in ("put", "patch"):
            print("Something changed")
            if message["path"] == "/":
                print("Seems like a fresh data or everything have changed, just grab it!")
                self.my_stuff: List[dict] = message["data"]
            else:
                print("Something updated somewhere, I dont't care I just want the latest snapshot of my stuff")
                # Just get whole-data of my stuff and list (second) item of the pyres (that I expect to be a dict)
                self.my_stuff: List[dict] = list(it.item[1] for it in self._db.child("my_stuff").get().pyres)

    def __init__(self) -> None:
        """Start tracking my stuff changes in Firebase"""
        super().__init__()
        self._db.child("my_stuff").stream(self.stream_handler)


tracker = MyStuffTracker()

while not tracker.is_ready:
    pass  # Just wait until the first snapshot of my stuff will be ready

print(f"My stuff is: {tracker.my_stuff}")