CRUD en Firebase Realtime Database con Python.
Firebase Realtime Database es una base de datos noSQL alojada en la nube que nos permite almacenar y sincronizar nuestros datos en la nube de Google en tiempo real. Los datos se almacenan en como un archivo JSON y se sincronizan en tiempo real para cada cliente conectado. Además podemos acceder a esa base de datos no solamente con Python como vamos a ver en esta píldora, sino también a través de aplicaciones Web, IOS o Android.
Registro en Firebase.
Para poder utilizar este servicio debemos registrarnos en Firebase, que es la aplicación general. Para ello iremos a la página https://firebase.google.com/ y nos registraremos con nuestra cuenta de Google.
Cuando nos pregunten, tenemos que elegir la facturación Spark que nos proporciona diversos servicios gratuitos 0$/mes, lo cual para un usuario particular nos servirá perfectamente. Si más tarde quieres o necesitas ampliar la cantidad de almacenamiento o número de consultas permitido siempre puedes comprar un plan que te permita adaptarlo a tus necesidades.
La página de inicio que se muestra al loguearnos será una parecida a esta:
Para crear una base de datos en tiempo real con Firebase tenemos que seleccionar primeramente "Crear un proyecto". Una vez hecho lo anterior, tenemos que ponerle un nombre al mismo.
Luego por defecto, Google nos propone aceptar la utilización de las herramientas de Google Analytics. Le damos a continuar.
A continuación seleccionamos la cuenta que vamos a escoger para Google Analytics. Podemos usar nuestra cuenta por defecto o crear una nueva para utilizar en Firebase. Yo escogeré la cuenta por defecto.
Finalmente le damos a crear proyecto y esperamos a que se configure todo.
Panel de control de Firebase dentro de una aplicación.
- Aspecto del Panel de control - Funcionalidades más importantes:
- Authentication: desde aquí se puede controlar cuáles son los mecanismos que estarán disponibles para la autenticación de usuarios, tanto email y clave como por redes sociales, junto con los datos de configuración.
- Firestore Database y Realtime Database: Aquí esta básicamente lo que vamos a hacer en esta píldora. Desde aquí crearemos nuestra base de datos en tiempo real (Realtime Database) cuya estructura básicamente la de un archivo JSON.
- Storage: para acceder al repositorio de archivos generados por los usuarios (como fotos, vídeos y archivos de audio) sin necesidad de utilizar código de servidor.
- Hosting: es un espacio de alojamiento donde desplegar la app realizada. Una vez activado también se pueden controlar aquí las configuraciones del hosting.
Seleccionamos donde pone Realtime Database y luego en "Crear una base de datos".
Luego elegimos el servidor más próximo a nosotros.
En la siguiente pantalla empezamos a configurar la base de datos. Tenemos dos opciones. Vamos a elegir la primera "Comenzar en modo bloqueado" ya que queremos una base privada que solo pueda acceder quien nosotros demos acceso.
y con esto ya tenemos nuestra base de datos creada con su dirección URL.
En la parte de arriba hay un menú que pone (Datos, reglas, copias de seguridad y usos). Escogemos "reglas" y cambiamos los valores de "read" y "write" que por defecto están en valor "false" a "true"
Finalmente de damos a "Publicar" e ignoramos el mensaje informativo de seguridad que nos saldrá.
Es importante que tengamos presente la dirección de nuestra base de datos ya que la necesitaremos para realizar la conexión y gestionar los registros.
Al crear la base de datos elegimos el "modo bloqueado". Por tanto para poder acceder y modificar los datos, tenemos que usar una clave privada de autentificación de nuestro usuario. Para obtenerla, en la consola del proyecto, justo en la parte de arriba a la izquierda en "Descripción General del Proyecto", al hacer click en la tuerca, nos saldrá un menú que pone "Configuración del Proyecto".
Lo seleccionamos, escogemos el lenguaje Python y finalmente pulsamos en "Generar nueva clave privada" y después de haber leído el mensaje informativo pulsamos en "Generar nueva clave privada". Se nos descargará un archivo JSON al ordenador que debemos guardar y no compartir con nadie ya que es la llave de acceso a nuestra base de datos.
CREAR UN SCRIPT DE PYTHON Para guardar datos en Firebase.
Para usar el Firebase Admin SDK, necesitaremos un proyecto de Firebase, una cuenta de servicio para comunicarlos con la base de datos y un archivo de configuración con nuestras credenciales. Todo esto ya lo hemos creado antes.
Ahora empezaremos creando una nueva carpeta de trabajo que contendrá nuestro código y dentro de ella creamos un entorno virtual.
src $ python3 -m venv miEntorno
Luego lo activamos
src $ source miEntorno/bin/activate
El administrador de Python de Firebase SDK permite a los desarrolladores integrar Firebase dentro de sus servicios y aplicaciones. Para instalar el Firebase Admin Python SDK, simplemente ejecutamos el siguiente comando dentro del entorno virtual:
miEntorno $ pip install firebase-admin
copiamos el archivo JSON, que contiene la clave descargada y que habíamos descargado anteriormente, dentro de la carpeta de trabajo.
Creamos también un archivo de Python, por ejemplo inicio.py y tecleamos el siguiente código que inicializará el SDK y nos conectará con la base de datos:
inicio.py
# Importamos las bibliotecas necesarias.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
Estructura de la base de datos.
Maneras de guardar datos
set | Escribir o reemplazar datos en una ruta de acceso definida. |
update | Actualiza algunas de las claves de una ruta de acceso definida sin reemplazar todos los datos. |
push | Agregar datos a una lista de datos en la base de datos. Cada vez que envías un nodo nuevo a una lista, tu base de datos genera una clave única. |
transaction | Usa transacciones cuando trabajes con datos complejos que podrían dañarse con las actualizaciones simultáneas |
Método SET.
inicio.py
# Importamos las bibliotecas necesarias.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia donde se guardarán los datos
ref = db.reference('servidor/datos_usuarios/blog')
inicio.py - Primer Caso
# Importamos las bibliotecas necesarias.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia donde se guardarán los datos
ref = db.reference('servidor/datos_usuarios/blog')
# Guardamos los datos mediante un diccionario en donde las claves serán los alias de
# los bloguers.
ref_usuarios = ref.child('usuarios')
ref_usuarios.set({
'pepemaravilloso': {
'fecha_de_nacimiento': '23 de Junio de 1989',
'nombre_completo': 'Alvaro Turienzo'
},
'lechuga': {
'fecha_de_nacimiento': '9 de Diciembre de 2003',
'nombre_completo': 'María García'
}
})
inicio.py - Segundo Caso
# Importamos las bibliotecas necesarias.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia donde se guardarán los datos
ref = db.reference('servidor/datos_usuarios/blog')
# Guardamos los datos mediante un diccionario en donde las claves serán los alias de
# los bloguers.
ref_usuarios = ref.child('usuarios')
# Usuario uno
ref_usuarios.child('pepemaravilloso').set({
'fecha_de_nacimiento': '23 de Junio de 1989',
'nombre_completo': 'Alvaro Turienzo'
})
# Usuario dos
ref_usuarios.child('lechuga').set({
'fecha_de_nacimiento': '9 de Diciembre de 2003',
'nombre_completo': 'María García'
})
Método PUSH.
inicio.py
# Importamos las bibliotecas necesarias.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia o rama donde se guardarán los datos
ref = db.reference('servidor/datos_usuarios/blog')
# Guardamos los datos mediante un diccionario en donde las claves se generarán automáticamente.
ref_usuarios = ref.child('usuarios')
ref_usuarios.push({
'pepemaravilloso': {
'fecha_de_nacimiento': '23 de Junio de 1989',
'nombre_completo': 'Alvaro Turienzo'
}})
ref_usuarios.push({
'lechuga': {
'fecha_de_nacimiento': '9 de Diciembre de 2003',
'nombre_completo': 'María García'
}})
inicio.py
# Importamos las bibliotecas necesarias.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia o rama donde se guardarán los datos
ref = db.reference('servidor/datos_usuarios/blog')
# Guardamos los datos mediante un diccionario en donde las claves se generarán automáticamente.
ref_usuarios = ref.child('usuarios')
nuevo_user = ref_usuarios.push({
'lupita': {
'fecha_de_nacimiento': '01 de Junio de 1909',
'nombre_completo': 'Ana Perez'
}})
print(nuevo_user.key)
Como actualizar datos Guardados.
inicio.py
# Importamos las bibliotecas necesarias.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia donde se actualizarán los datos
ref = db.reference('servidor/datos_usuarios/blog/usuarios')
# Rama hija a modificar.
ref_usuarios = ref.child('-MxJzEQdI3BrPQnZ2qHI/pepemaravilloso')
# Clave a modificar.
ref_usuarios.update({"nombre_completo": "Romanones Perez"})
inicio.py
# Importamos las bibliotecas necesarias.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia donde se actualizarán los datos
ref = db.reference('servidor/datos_usuarios/blog/usuarios')
# Rama hija a modificar.
ref.update({'-MxJzES8PBOnqKpcph9p/lechuga/nombre_completo':'Pepita Luniega'})
Recuperar datos de la base de datos.
inicio.py
# Importamos las bibliotecas necesarias.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia o rama donde se guardarán los datos
ref = db.reference('servidor/datos_usuarios/blog/usuarios')
# Imprimimos los registros asociados a la rama usuarios.
print(ref.get())
(miEntorno) chema@ubuntu:~/Cursos/Python/firebase$ python inicio.py
{'-MxJzEQdI3BrPQnZ2qHI': {'pepemaravilloso': {'fecha_de_nacimiento': '23 de Junio de 1989',
'nombre_completo': 'Romanones Perez'}}, '-MxJzES8PBOnqKpcph9p': {'lechuga': {'fecha_de_nacimiento'
: '9 de Diciembre de 2003', 'nombre_completo': 'Pepita Luniega'}}}
order_by_child()
, order_by_key()
u order_by_value()
limit_to_first()
, limit_to_last()
, start_at()
, end_at()
y equal_To()
.inicio.py
# Importamos las bibliotecas necesarias.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia o rama donde se guardarán los datos
ref = db.reference('Productos')
# Guardamos los diferentes productos.
dato1 = ref.child("echo dot").set({'precio': 34.99, 'cantidad': 2})
dato2 = ref.child("fire tv stick").set({'precio': 24.99, 'cantidad': 5})
dato3 = ref.child("blink outdoor").set({'precio': 64.99, 'cantidad': 12})
Ordenamiento con una clave secundaria especificada
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia o rama donde se guardarán los datos
ref = db.reference('Productos')
# consultamos los productos ordenamos por precio de menor a mayor.
consulta = ref.order_by_child('precio').get()
for key, val in consulta.items():
print(f"El producto {key} tiene el siguiente precio {val['precio']}")
(miEntorno) chema@ubuntu:~/Cursos/Python/firebase$ python inicio.py
El producto fire tv stick tiene el siguiente precio 24.99
El producto echo dot tiene el siguiente precio 34.99
El producto blink outdoor tiene el siguiente precio 64.99
# Importamos las bibliotecas necesarias.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia o rama donde se guardarán los datos
ref = db.reference('Productos')
# Consulta a la base de datos anidada.
consulta = ref.order_by_child('caracteristica/precio').get()
for key, val in consulta.items():
print(f"El producto {key} tiene el siguiente precio {val['caracteristica']['precio']}")
(miEntorno) chema@ubuntu:~/Cursos/Python/firebase$ python inicio.py
El producto fire tv stick tiene el siguiente precio 24.99
El producto echo dot tiene el siguiente precio 34.99
El producto blink outdoor tiene el siguiente precio 64.99
Ordenamiento por clave
# Importamos las bibliotecas necesarias.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia o rama donde se guardarán los datos
ref = db.reference('Productos')
# realizamos la consulta a la base de datos
consulta = ref.order_by_key().get()
for elemento in consulta:
print(elemento)
(miEntorno) chema@ubuntu:~/Cursos/Python/firebase$ python inicio.py
blink outdoor
echo dot
fire tv stick
Ordenamiento por Valor.
{
"Productos": {
"blink outdoor" : 64.99,
"echo dot" : 34.99,
"fire tv stick" : 24.99
}
}
# Importamos las bibliotecas necesarias.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia o rama donde se guardarán los datos
ref = db.reference('Productos')
# realizamos la consulta por order_by_value()
consulta= ref.order_by_value().get()
for clave, valor in consulta.items():
print(f"Producto: {clave} -> precio: {valor}")
(miEntorno) chema@ubuntu:~/Cursos/Python/firebase$ python inicio.py
Producto: fire tv stick -> precio: 24.99
Producto: echo dot -> precio: 34.99
Producto: blink outdoor -> precio: 64.99
Consultas Complejas.
order_by_child()
, order_by_key()
u order_by_value()
Consultas por límite.
{
"Productos": {
"blink outdoor" : 64.99,
"echo dot" : 34.99,
"fire tv stick" : 24.99
}
}
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia o rama donde se guardarán los datos
ref = db.reference('Productos')
consulta= ref.order_by_value().limit_to_first(2).get()
for clave, valor in consulta.items():
print(f"Producto: {clave} -> precio: {valor}")
chema@ubuntu:~/Cursos/Python/firebase$ python inicio.py
Producto: fire tv stick -> precio: 24.99
Producto: echo dot -> precio: 34.99
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia o rama donde se guardarán los datos
ref = db.reference('Productos')
consulta= ref.order_by_value().limit_to_last(2).get()
for clave, valor in consulta.items():
print(f"Producto: {clave} -> precio: {valor}")
chema@ubuntu:~/Cursos/Python/firebase$ python inicio.py
Producto: echo dot -> precio: 34.99
Producto: blink outdoor -> precio: 64.99
Consultas por Rango.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia o rama donde se guardarán los datos
ref = db.reference('Productos')
consulta= ref.order_by_value().start_at(50).get()
for clave, valor in consulta.items():
print(f"Producto: {clave} -> precio: {valor}")
chema@ubuntu:~/Cursos/Python/firebase$ python inicio.py
Producto: blink outdoor -> precio: 64.99
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia o rama donde se guardarán los datos
ref = db.reference('Productos')
consulta= ref.order_by_key().end_at('echo dot').get()
for clave, valor in consulta.items():
print(f"Producto: {clave} -> precio: {valor}")
chema@ubuntu:~/Cursos/Python/firebase$ python inicio.py
Producto: blink outdoor -> precio: 64.99
Producto: echo dot -> precio: 34.99
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia o rama donde se guardarán los datos
ref = db.reference('Productos')
consulta= ref.order_by_key().start_at('a').end_at('c').get()
for clave, valor in consulta.items():
print(f"Producto: {clave} -> precio: {valor}")
chema@ubuntu:~/Cursos/Python/firebase$ python inicio.py
Producto: blink outdoor -> precio: 64.99
# Importamos las bibliotecas necesarias.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia o rama donde se guardarán los datos
ref = db.reference('Productos')
consulta= ref.order_by_key().equal_to("fire tv stick").get()
for clave, valor in consulta.items():
chema@ubuntu:~/Cursos/Python/firebase$ python inicio.py
Producto: fire tv stick -> precio: 24.99
Borrar registros.
# Importamos las bibliotecas necesarias.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
# Cargo el certificado de mi proyecto Novatillo
cred = credentials.Certificate("novatillo-874ab-firebase-adminsdk-frqen-29438715e3.json")
# hace referencia a la base de datos en tiempo real que tenemos creada.
firebase_admin.initialize_app(cred, {'databaseURL':'https://novatillo-874ab-default-rtdb.europe-west1.firebasedatabase.app/'})
# Señalamos la referencia o rama donde se guardarán los datos
ref = db.reference('Productos')
consulta= ref.child("echo dot").delete()
No hay comentarios:
Publicar un comentario