Python Flask SQLite-Datenbankeinrichtung

Beginner

This tutorial is from open-source community. Access the source code

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.