Einführung
In diesem Lab werden wir lernen, wie man eine SQLite-Datenbank mit dem Python Flask-Framework definiert und darauf zugreift. Wir werden eine SQLite-Datenbank einrichten, eine Verbindung zu ihr herstellen, Tabellen erstellen und die Datenbank initialisieren.
Hinweis: Sie müssen die Code-Datei selbst erstellen und sie in der Umgebung ausführen. Sie können den Status des Flask-Diensts auf Web 5000 vorab anzeigen.
Datenbank einrichten
Zunächst müssen wir eine SQLite-Datenbank einrichten, um Benutzer und Beiträge zu speichern. SQLite ist eine bequeme Wahl, da es keinen separaten Datenbankserver erfordert und in Python integriert ist.
In unserer Flask-Anwendung werden wir eine Verbindung zur SQLite-Datenbank herstellen. Diese Verbindung ist in Webanwendungen typischerweise an der Anfrage gebunden und wird nach Abschluss der Arbeit geschlossen.
Die Verbindung wird mit der sqlite3.connect-Funktion hergestellt, und wir verwenden das spezielle Flask-Objekt g, um die Verbindung zu speichern und wiederzuverwenden.
Erstellen Sie eine neue Python-Datei db.py und fügen Sie den folgenden Code hinzu:
## flaskr/db.py
import sqlite3
from flask import current_app, g
def get_db():
## Überprüfen, ob 'db' nicht in 'g' ist
if 'db' not in g:
## Herstellen einer Verbindung zur Datenbank
g.db = sqlite3.connect(
current_app.config['DATABASE'],
detect_types=sqlite3.PARSE_DECLTYPES
)
## Rückgabe von Zeilen, die wie Dicts verhalten
g.db.row_factory = sqlite3.Row
return g.db
def close_db(e=None):
## Entfernen von 'db' aus 'g' und Schließen der Verbindung, wenn sie existiert
db = g.pop('db', None)
if db is not None:
db.close()
Tabellen erstellen
In SQLite werden Daten in Tabellen und Spalten gespeichert. Wir müssen diese erstellen, bevor wir Daten speichern und abrufen können. Unsere Anwendung wird Benutzer in der Tabelle user und Beiträge in der Tabelle post speichern.
Erstellen Sie eine neue SQL-Datei schema.sql und fügen Sie den folgenden Code hinzu:
## flaskr/schema.sql
DROP TABLE IF EXISTS user;
DROP TABLE IF EXISTS post;
CREATE TABLE user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL
);
CREATE TABLE post (
id INTEGER PRIMARY KEY AUTOINCREMENT,
author_id INTEGER NOT NULL,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
title TEXT NOT NULL,
body TEXT NOT NULL,
FOREIGN KEY (author_id) REFERENCES user (id)
);
Datenbank initialisieren
Als nächstes werden wir Python-Funktionen hinzufügen, die die SQL-Befehle ausführen, um die Tabellen zu erstellen. Fügen Sie die folgenden Funktionen zur db.py-Datei hinzu:
## flaskr/db.py
def init_db():
db = get_db()
with current_app.open_resource('schema.sql') as f:
db.executescript(f.read().decode('utf8'))
@click.command('init-db')
def init_db_command():
"""Clear the existing data and create new tables."""
init_db()
click.echo('Initialized the database.')
Registrierung bei der Anwendung
Die Funktionen close_db und init_db_command müssen bei der Anwendungsinstanz registriert werden, damit die Anwendung darauf zugreifen kann. Da wir eine Factory-Funktion verwenden, werden wir eine Funktion schreiben, die eine Anwendung nimmt und die Registrierung vornimmt.
Fügen Sie die folgende Funktion zur db.py-Datei hinzu:
## flaskr/db.py
def init_app(app):
app.teardown_appcontext(close_db)
app.cli.add_command(init_db_command)
Dann importieren und rufen Sie diese Funktion aus der Factory auf. Fügen Sie den folgenden Code zur __init__.py-Datei hinzu:
## flaskr/__init__.py
def create_app():
app =...
## vorhandener Code weggelassen
from. import db
db.init_app(app)
return app
Initialisierung der Datenbankdatei
Jetzt, da init-db bei der App registriert ist, kann es mit dem Befehl flask aufgerufen werden.
Führen Sie den Befehl init-db aus:
flask --app flaskr init-db
Initialized the database.
Zusammenfassung
In diesem Lab haben wir gelernt, wie man eine SQLite-Datenbank mit dem Python Flask-Framework definiert und darauf zugreift. Wir haben eine Verbindung zur Datenbank hergestellt, Tabellen erstellt und die Datenbank initialisiert. Dies ist grundlegend für jede Webanwendung, die Daten in einer Datenbank speichern und abrufen muss.