How to Retrieve Data from Firebase using Python
Solution 1
Installation
pip install firebase
Python Version
Firebase was written for python 3 and above and will not work correctly with python 2.
Add Firebase to your Application
Your Google's Firebase configuration data can be found on Firebase > Settings > Project Settings Scroll to bottom > Add to web app > config
For use with only user based authentication we can create the following configuration:
from firebase import Firebase
config = {
"apiKey": "apiKey",
"authDomain": "projectId.firebaseapp.com",
"databaseURL": "https://databaseName.firebaseio.com",
"storageBucket": "projectId.appspot.com"
}
firebase = Firebase(config)
Authentication
The sign_in_with_email_and_password()
method will return user data including a token you can use to adhere to security rules.
Each of the following methods accepts a user token: get()
, push()
, set()
, update()
, remove()
and stream()
.
# Get a reference to the auth service
auth = firebase.auth()
# Log the user in
user = auth.sign_in_with_email_and_password(email, password)
# Get a reference to the database service
db = firebase.database()
# data to save
data = {
"name": "Joe Tilsed"
}
# Pass the user's idToken to the push method
results = db.child("users").push(data, user['idToken'])
Database
You can build paths to your data by using the child()
method.
db = firebase.database()
db.child("users").child("Joe")
Save Data
pushTo save data with a unique, auto-generated, timestamp-based key, use the push()
method.
data = {"name": "Joe Tilsed"}
db.child("users").push(data)
set
To create your own keys use the set()
method. The key in the example below is "Joe".
data = {"name": "Joe Tilsed"}
db.child("users").child("Joe").set(data)
update
To update data for an existing entry use the update()
method.
db.child("users").child("Joe").update({"name": "Joe W Tilsed"})
remove
To delete data for an existing entry use the remove()
method.
db.child("users").child("Joe").remove()
Retrieve Data
valQueries return a FirebaseResponse object. Calling val()
on these objects returns the query data.
users = db.child("users").get()
print(users.val())
>> {"Joe": {"name": "Joe Tilsed"}, "Syd": {"name": "Sydney Cox"}}
key
Calling key()
returns the key for the query data.
user = db.child("users").get()
print(user.key())
>> users
each
Returns a list of objects on each of which you can call val()
and key()
.
all_users = db.child("users").get()
for user in all_users.each():
print(user.key())
>> Joe
print(user.val())
>> {name": "Joe Tilsed"}
get
To return data from a path simply call the get()
method.
all_users = db.child("users").get()
Hope this helps. Full docs: https://pypi.org/project/firebase/
Solution 2
I have something like this which is working
firebase_url = 'https://xyz.firebaseio.com/'
client_name = 'Mumbai-Kandivali'
class MainPage(webapp.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'application/json'
url = firebase_url + '/' + client_name + '/temperature.json'
json_object = json.load(urllib2.urlopen(url))
json.dump(json_object, self.response.out ) #this will go to frontend
Hope this help...However I am working on fetching "import firebase" in python and then perform operation
Sahar Alsadah
Updated on June 15, 2022Comments
-
Sahar Alsadah almost 2 years
I'm new to Python and I would like to connect to Firebase using Python. I can successfully add and modify Firebase using
put()
andpatch()
, but I can't find a way to retrieve my data from Firebase.Code:
import serial import time import requests import json firebase_url = 'https://testing1639.firebaseio.com' #Connect to Serial Port for communication ser = serial.Serial('/dev/ttyUSB0', 9600) #Setup a loop to send temperature values at fixed intervals in seconds fixed_interval = 2 while 1: try: #Temperature value obtained from Arduino + LM35 Temp Sensor temperature_c = ser.readline() #Current time and date time_hhmmss = time.strftime('%H:%M:%S') date_mmddyyyy = time.strftime('%d/%m/%Y') #Current location name temperature_location = 'Mumbai-Kandivali' ; print temperature_c + ',' + time_hhmmss + ',' + date_mmddyyyy + ',' + temperature_location #Insert record data = {'date':date_mmddyyyy,'time':time_hhmmss,'value':temperature_c} result = requests.post(firebase_url + '/' + temperature_location + '/temperature.json', data=json.dumps(data)) #Insert record print 'Record inserted. Result Code = ' + str(result.status_code) + ',' + result.text time.sleep(fixed_interval) except IOError: print('Error! Something went wrong.') time.sleep(fixed_interval)
How can I modify it to retrieve the data?