So verbinden Sie Ihre Flask-App mit CouchDB: Eine NoSQL-Datenbank
Die Verbindung von Flask mit SQL-Datenbanken wie PostgreSQL und SQLite ist ein Kinderspiel. Aber auch mit NoSQL-Datenbanken wie CouchDB synchronisiert sich das Framework perfekt. Und als zusätzlichen Vorteil können Sie Ihre Daten einfach abfragen, wenn Sie CouchDB mit Flask verwenden.
Sind Sie bereit, eine Änderung vorzunehmen, indem Sie ein NoSQL wie CouchDB mit Ihrer Flask-App verwenden? So richten Sie CouchDB auf Ihrem lokalen Rechner ein und verbinden ihn mit Flask.
Was ist CouchDB?
CouchDB ist eine NoSQL-Datenbank, die derzeit im Besitz der Apache Software Foundation ist. Geschrieben mit Erlang, wurde die Software erstmals 2005 veröffentlicht.
Im Gegensatz zu den regulären tabellenverknüpften Datenbanken, an die Sie wahrscheinlich gewöhnt sind, ist CouchDB ein nicht relationales Datenbankverwaltungssystem, das Daten als Roh-JSON speichert.
CouchDB ist non-blocking, also sperrt es die Datenbank während der Dateneingabe nicht. Eine der Stärken von CouchDB besteht darin, dass es eine Richtlinie zur Kontrolle der Parallelität mehrerer Versionen zum Lesen und Schreiben von Daten verwendet. So ermöglicht es gleichzeitige Eingaben von mehreren Benutzern ohne Eingriff in die bestehende Struktur der Daten in der Datenbank.
So ist CouchDB bei Abfragen schnell und bei der Verwendung asynchroner Methoden einfach zu handhaben. Das macht es jedoch nicht besser als sein SQL-Gegenstück. Jede Technologie hat ihre Vor- und Nachteile.
CouchDB einrichten
Um CouchDB zu verwenden, laden Sie eine kompatible Version von der offiziellen Website von CouchDB herunter und installieren Sie sie.
Und wenn diese neueste Version für Sie nicht funktioniert, gehen Sie zum CouchDB-Archiv und laden Sie Version 1.6.1 herunter, eine frühere Version von CouchDB.
Sobald Sie CouchDB installiert haben, führen Sie es wie jede andere Desktop-App auf Ihrem PC aus.
Öffnen Sie Ihren Browser. Starten Sie dann den Server von CouchDB, indem Sie Folgendes in Ihre Adressleiste einfügen:
http://localhost:5984/_utils/index.html
Python und Flask einrichten
In diesem Tutorial wird jedoch davon ausgegangen, dass Python bereits auf Ihrem PC installiert ist. Gehen Sie andernfalls zu python.org und installieren Sie die neueste Version von Python auf Ihrem PC.
Nachdem Sie CouchDB eingerichtet haben, erstellen Sie einen Projektstammordner. Öffnen Sie dann Ihre Befehlszeile für dieses Verzeichnis und erstellen Sie eine virtuelle Python-Umgebung .
Installieren Sie die neueste Version von Flask im virtuellen Raum mit pip :
pip install flask
Flask mit CouchDB verbinden
Um CouchDB mit Ihrer Flask-App zu verwenden, installieren Sie Flask-CouchDB , das Laufzeitpaket zum Verbinden der Datenbank mit Flask.
Um dies zu tun:
pip install Flask-CouchDB
Nachdem Sie Flask-CouchDB erfolgreich installiert haben, erstellen Sie eine app.py- Datei in diesem Stammordner. Erstellen Sie auf ähnliche Weise eine Datei database.py – diese übernimmt Ihre Datenbankerstellung.
Öffnen Sie database.py und importieren Sie die folgenden Pakete:
from couchdb import Server
Erstellen Sie als Nächstes Ihre Datenbank in derselben Datei mit dem folgenden Codeblock:
from couchdb import Server
server = Server()
db = server.create('muocouch')
Führen Sie database.py über die CLI aus. Dann öffne oder aktualisiere den lokalen Server von CouchDB über deinen Browser wie zuvor. Sie sollten nun die Datenbank (in diesem Fall muocouch ) in CouchDB aufgelistet sehen.
Hinweis: Stellen Sie sicher, dass Sie für Datenbanken eine Namenskonvention in Kleinbuchstaben verwenden, da CouchDB möglicherweise keine Groß- oder Mischbuchstaben akzeptiert.
Speichern Sie Ihre ersten CouchDB-Daten mit Flask
Letztendlich ist der Zweck jeder Datenbank die Datenspeicherung. Sobald Sie eine Datenbank in CouchDB haben, können Sie sofort mit dem Speichern von Daten aus Ihrer Flask-App beginnen.
Öffnen Sie zunächst app.py und importieren Sie die folgenden Pakete:
from flask import Flask
from couchdb import Server
from flaskext.couchdb import Document
Erstellen Sie als Nächstes eine Flask-App und eine CouchDB-Serverinstanz:
app = Flask(__name__, static_url_path='/static')
app.debug=True
server = Server()
Speichern wir nun einige Benutzereingaben in CouchDB:
@app.route('/', methods=['GET', 'POST'])
def register():
user = {
"username":"media site",
"email":"[email protected]",
"password":"encrypteddata"
}
db = server['muocouch'] #select the database
doc_id, doc_rev = db.save(user) #store your data in th database
return "<h2>Your data should now be in the database</h2>"
Wenn Sie möchten, können Sie Ihren Flask-Server in den Entwicklungsmodus versetzen, bevor Sie ihn ausführen.
Führen Sie dazu den folgenden Befehl über Ihre CLI aus:
set FLASK_ENV=development
Beachten Sie, dass die Einstellung des Servermodus optional ist. Es macht nur das Debuggen Ihres Codes problemlos.
Unabhängig von der Einstellung des Servermodus können Sie den Flask-Server jedoch wie folgt über das CMD starten:
flask run
Flask setzt Ihren Port jedoch standardmäßig auf localhost:5000 . Sie sollten nun die Nachricht im H2- Tag sehen, sobald Sie diese Adresse über Ihren Browser laden.
Daten validieren und Duplikate mit CouchDB-Abfragen prüfen
Um dies weiter zu standardisieren, können Sie Abfragen verwenden, um Eingaben zu validieren und Duplikate in Ihrer Datenbank zu vermeiden. Das Abfragen von CouchDB unterscheidet sich ein wenig von der Vorgehensweise bei SQL-Datenbanken.
CouchDB verwendet sogenannte "JavaScript-Ansichten", um Daten aus der Datenbank abzufragen. Glücklicherweise ist dies relativ einfach.
Bevor Sie fortfahren, sehen Sie wie folgt eine grundlegende CouchDB-Abfrageansicht aus:
map_func = '''function(doc)
{ emit(doc.doc_rev, doc); }'''
myQuery = [docType].query(db, map_func, reduce_fun=None)
Jetzt verwenden wir den obigen Code praktisch:
#Create a document object model called " Users :"
class User(Document):
doc_type = 'User'
@app.route('/', methods=['GET', 'POST'])
def register():
user = {
"username":"media site",
"email":"[email protected]",
"password":"encrypteddata"
}
db = server['muocouch'] #select the database
# Use the view function to fetch your data from CouchDB
map_func = '''function(doc)
{ emit(doc.doc_rev, doc); }'''
# Get all the data by running a query set
myQuery = User.query(db, map_func, reduce_fun=None, reverse=True)
q = [i['username'] for i in myQuery] # Loop out all the usernames from the database
q2 = [i['email'] for i in myQuery] # Loop out all the email addresses from the database
q3 = q+q2 # Merge both queries into a single list
print(q3)
return "<h2>Your data is now in the database</h2>"
Der obige Code verwendet die User- Klasse, um die von der Ansichtsfunktion abgerufenen Daten abzufragen. Achten Sie genau auf die Parameter innerhalb des Abfragesatzes ( myQuery ).
Das Drucken von q3 , wie Sie es oben getan haben, sollten jetzt alle Benutzernamen und E-Mail-Adressen in der Datenbank in der Befehlszeile ausgeben.
So können Sie diese Abfrage verwenden, um die Eingaben von Benutzern zu überprüfen:
if not (user['username'] in q3 or user['email'] in q3):
#store your data into the database if itdoesn't exist
doc_id, doc_rev = db.save(user)
return "<h2>Registered successfully</h2>"
else:
return "<h2>Username or email exists</h2>"
Das Aktualisieren Ihres Browsers gibt jedes Mal die else- Anweisung zurück, wenn Sie versuchen, einen Benutzernamen oder eine E-Mail einzugeben, die bereits in der Datenbank vorhanden ist. Und wenn Sie eine neue eingeben, werden Ihre Daten erfolgreich gespeichert, indem die if- Bedingung ausgeführt wird.
Das ist es! Sie haben gerade Ihre erste NoSQL-Datenbank mit Flask-CouchDB erstellt.
Obwohl sich das Erstellen und Abfragen von Datenbanken in CouchDB um die hier hervorgehobenen Beispiele dreht, können Sie die Funktionalitäten von Flask weiter erkunden. Sie können beispielsweise Eingabefelder mit wtforms erstellen und Duplikate mit Flasks message flash markieren .
Sie können Ihre Abfrage sogar an jQuery von JavaScript übergeben, um Eingaben zu validieren und Duplikate asynchron zu überprüfen.
Ist CouchDB besser als SQL-Datenbanken?
Die Verwendung von CouchDB oder einer anderen NoSQL-Datenbank mit Flask oder einer anderen Programmiertechnologie hängt von Ihren Vorlieben ab. Aber es ist praktisch, wenn es um strukturlose Daten und Rohmedien geht.
Bevor Sie sich entscheiden, sollten Sie sich jedoch die Unterschiede zwischen NoSQL- und SQL-Datenbanken ansehen, um zu entscheiden, welche davon für Ihr Projekt geeignet ist.