Eine grundlegende Anleitung zur Firebase Realtime Database mit Python SDK

Blog

Eine grundlegende Anleitung zur Firebase Realtime Database mit Python SDK

Eine grundlegende Anleitung zur Firebase Realtime Database mit Python SDK

Firebase-Echtzeitdatenbank ist eine in der Cloud gehostete NoSQL-Datenbank. Die Daten werden als JSON gespeichert und in Echtzeit mit jedem angeschlossenen Client synchronisiert. Mit dem Firebase Admin SDK können wir Echtzeitdatenbankdaten mit vollständigen oder eingeschränkten Administratorrechten lesen und schreiben.



In meinem letzten Projekt hatte ich die Gelegenheit, mit Firebase Realtime Database zu arbeiten. Daher habe ich beschlossen, eine grundlegende Anleitung zur Verwendung der Firebase Realtime Database mit dem Python SDK zu schreiben.

Firebase zur App hinzufügen

Um das Firebase Admin SDK verwenden zu können, benötigen wir ein Firebase-Projekt, ein Dienstkonto für die Kommunikation mit dem Firebase-Dienst und eine Konfigurationsdatei mit den Anmeldedaten Ihres Dienstkontos. Folgen Firebase zu Ihrer App hinzufügen um die Konfigurationsdatei abzurufen, bei der es sich um eine JSON-Datei handelt.



Firebase Python SDK installieren

Das Firebase Admin Python SDK ermöglicht es serverseitigen (Back-End) Python-Entwicklern, Firebase in ihre Dienste und Anwendungen zu integrieren. Um das Firebase Admin Python SDK zu installieren, führen Sie einfach den folgenden Befehl in einem Terminal aus:

pip install firebase-admin

Initialisieren des SDK

Initialisieren Sie das SDK mit diesem Code-Snippet:



import firebase_admin from firebase_admin import credentials from firebase_admin import db # Fetch the service account key JSON file contents cred = credentials.Certificate('firebase-adminsdk.json') # Initialize the app with a service account, granting admin privileges firebase_admin.initialize_app(cred, { 'databaseURL': 'https://.firebaseio.com/' })

Strukturieren Sie die Datenbank

In der Firebase Realtime Database sind Daten als JSON-Baum strukturiert. Im Gegensatz zu einer SQL-Datenbank gibt es keine Tabellen oder Datensätze. Wenn wir dem JSON-Baum Daten hinzufügen, wird er zu einem Knoten in der vorhandenen JSON-Struktur mit einem zugehörigen Schlüssel.

Best Practice für eine Datenstruktur besteht darin, das Verschachteln von Daten zu vermeiden und die Datenstruktur so flach wie möglich zu halten. Folgen Strukturieren Sie Ihre Datenbank für eine ausführliche Anleitung.

Daten speichern

Erstellen Sie eine Datenbankreferenz und übergeben Sie ihr dann ein Objekt mit |_+_| Methode:

set

Folgen Daten speichern für mehr Informationen.

Daten aktualisieren

Um einen Knoten einer Datenbankposition zu aktualisieren, ohne andere untergeordnete Knoten zu überschreiben, verwenden Sie |_+_| Methode wie unten gezeigt:

ref = db.reference('/') ref.set({ 'boxes': { 'box001': { 'color': 'red', 'width': 1, 'height': 3, 'length': 2 }, 'box002': { 'color': 'green', 'width': 1, 'height': 2, 'length': 3 }, 'box003': { 'color': 'yellow', 'width': 3, 'height': 2, 'length': 1 } } })

Dadurch wird die Farbe von box001 auf Blau aktualisiert.

Die Firebase Realtime Database unterstützt auch Multipath-Updates. Damit können wir die Farbe sowohl für box001 als auch für box002 gleichzeitig aktualisieren:

update

Im Python Admin SDK blockieren alle Schreibmethoden . Das heißt, die Schreibmethoden kehren nicht zurück, bis die Schreibvorgänge in der Datenbank festgeschrieben wurden.

Datenlisten speichern

Wenn wir eine Liste von Boxen speichern möchten, möchten wir möglicherweise für jede neue Box einen eindeutigen Schlüssel anstelle von box001, box002, box003 verwenden. Um dieses Problem zu lösen, bieten die Firebase-Clients ein |_+_| Funktion, die für jedes neue Kind einen eindeutigen Schlüssel generiert

ref = db.reference('boxes') box_ref = ref.child('box001') box_ref.update({ 'color': 'blue' })

Der eindeutige Schlüssel basiert auf einem Zeitstempel, sodass Listenelemente automatisch chronologisch sortiert werden. Unsere Datenbankdaten sehen jetzt so aus:

ref = db.reference('boxes') ref.update({ 'box001/color': 'red', 'box002/color': 'blue' })

Holen Sie sich den von push() generierten eindeutigen Schlüssel

Der Aufruf von push() gibt einen Verweis auf den neuen Datenpfad zurück, den Sie verwenden können, um den Schlüssel abzurufen oder Daten darauf zu setzen. Der folgende Code führt zu den gleichen Daten wie das obige Beispiel, aber jetzt haben wir Zugriff auf den eindeutigen Schlüssel, der generiert wurde:

push()

Daten abrufen

Das Python Admin SDK unterstützt derzeit nur das Blockieren von Lesevorgängen. Es kann nicht verwendet werden, um Ereignis-Listener hinzuzufügen, die Echtzeit-Update-Benachrichtigungen erhalten. In Python werden in einer Firebase Realtime Database gespeicherte Daten abgerufen, indem eine Blockierungsmethode für eine Datenbankreferenz aufgerufen wird, die die in der Referenz gespeicherten Daten zurückgibt. Jeder Methodenaufruf ist ein einmaliger Vorgang.

Die |_+_| -Methode in Python gibt eine Python-Darstellung der Daten direkt zurück:

ref = db.reference('boxes') ref.push({ 'color': 'purple', 'width': 7, 'height': 8, 'length': 6 })

Daten abfragen

Firebase Realtime Database unterstützt einige Abfragen zum selektiven Abrufen von Daten basierend auf verschiedenen Faktoren.

Datenbestellung

Wir können Daten auf drei Arten sortieren: nach untergeordnetem Schlüssel, nach Schlüssel oder nach Wert. Eine grundlegende Datenbankabfrage beginnt mit einer dieser Sortierfunktionen, die im Folgenden erläutert werden.

Indizierung auf Werten

Wenn wir die Auftragsabfrage verwenden möchten, müssen wir die Werte/Schlüssel zum |_+_| . hinzufügen Regel.

wie man uttrust kauft
{ 'boxes': { '-L5_dtlqoO2K8rgwdxJ3': { 'color': 'purple', 'width': 7, 'height': 8, 'length': 6 } } }

Lesen Indexieren Sie Ihre Daten auf dem |_+_| Regel für weitere Informationen.

Bestellung über einen angegebenen untergeordneten Schlüssel

Um die Daten aller nach Höhe geordneten Boxen zu erhalten, können wir Folgendes tun:

ref = db.reference('boxes') # Generate a reference to a new location and add some data using push() new_box_ref = ref.push({ 'color': 'purple', 'width': 7, 'height': 8, 'length': 6 }) # Get the unique key generated by push() box_id = new_box_ref.key

Nach Schlüssel bestellen

Wir können Knoten auch nach ihren Schlüsseln ordnen, indem wir |_+_| . verwenden Methode:

get()

Nach Wert sortieren

Wir können Knoten nach dem Wert ihrer untergeordneten Schlüssel ordnen, indem wir |_+_| . verwenden Methode:

ref = db.reference('boxes') print(ref.get()) .indexOn

Abfragen begrenzen

Die |_+_| und |_+_| Abfragen werden verwendet, um eine maximale Anzahl von abzurufenden untergeordneten Elementen festzulegen:

{ 'rules': { 'boxes': { '.indexOn': ['color', 'width', 'height', 'length'] }, 'weights': { '.indexOn': ['.value'] }, '.read': 'auth != null', '.write': 'auth != null' } } .indexOn ref = db.reference('boxes') snapshot = ref.order_by_child('height').get() for key, val in snapshot.items(): print('{0} => {1}'.format(key, val))

Bereichsabfragen

Verwenden von |_+_|, |_+_| und |_+_| ermöglicht es, beliebige Start- und Endpunkte für unsere Abfragen zu wählen:

orderByKey() ref = db.reference('boxes') snapshot = ref.order_by_key().get() for key, val in snapshot.items(): print('{0} => {1}'.format(key, val)) orderByValue() { 'weights': { 'person001' : 60, 'person002' : 65, 'person003' : 80, 'person004' : 55, 'person005' : 72 } }

Besuch Datensicherheit Sicherheitsregeln kennen.
Besuch firebase_admin.db-Modul um Informationen über das Modul zu erhalten, das Funktionen und Klassen enthält, die die Interaktion mit der Firebase Realtime Database erleichtern.

Quellcode herunterladen von Github .

#python #datenbanken #firebase #web-entwicklung