Estoy desarrollando una aplicación de escritorio con Python y Firebase como el backend.

Dado que puede haber muchos datos, necesito obtener los datos paginados y ordenados por el parámetro "Timestamp". Así que estoy usando esto:

raw_data = db.child("UploadedImages").order_by_child("Timestamp").start_at(self.start_from).limit_to_first(3).get()

("Self.Start_from" es un doble, que representa la marca de tiempo de los últimos objetos recibidos)

Pero los datos devueltos no se clasifican y comienza desde el primer índice. Lo extraño es que funciona bien en otro proyecto de Firebase con la misma estructura exactamente, pero menos datos.

También me he saltado la paginación y he probado este código y el resultado fue el mismo:

raw_data = db.child("UploadedImages").order_by_child("Timestamp").get()

Después de obtener los datos, lo almaceno en otra variable como DICT así:

parsed = json.loads(json.dumps(raw_data.val()))

Y luego ite la variable "analizada" y analice los datos a mi clase de imagen:

for i in parsed:
    image = models.Image(parsed[i])

Aquí hay un ejemplo de mis datos en Firstbase: My Firebase Data Structure

0
Masih Bahmani 25 may. 2021 a las 12:53

1 respuesta

La mejor respuesta

Las teclas en un objeto JSON están de definición sin orden podrían, por lo que cuando llame raw_data.val(), se pierde la información sobre el pedido.

Por esa razón, las llamadas order_by_child son útiles para filtrar los datos en el servidor, pero no es útil (en este contexto) obtener los datos en un orden específico. Deberá volver a ordenar los datos en su código de solicitud después de que se haya recuperado.

0
Frank van Puffelen 25 may. 2021 a las 13:39