Erstellen einer Flask REST-API mit SQLite

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Projekt werden wir lernen, wie man eine REST-API in Flask mit SQLite als Datenbank erstellt. Wir beginnen damit, eine Beispiel-SQLite-Datenbank zu erstellen und sie mit einigen Daten zu befüllen. Anschließend bauen wir eine Flask-Anwendung mit Endpunkten, um CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) auf den Daten in der SQLite-Datenbank auszuführen.

👀 Vorschau

Flask SQLite API Vorschau

🎯 Aufgaben

In diesem Projekt lernst du:

  • Wie man eine Flask-Anwendung mit SQLite als Datenbankbackend erstellt
  • Wie man eine Beispiel-SQLite-Datenbank und -Tabelle erstellt
  • Wie man die Datenbanktabelle mit Beispiel-Daten befüllt
  • Wie man Endpunkte implementiert, um alle Benutzer abzurufen, einen bestimmten Benutzer anhand der ID abzurufen, einen neuen Benutzer zu erstellen, einen bestehenden Benutzer zu aktualisieren und einen Benutzer zu löschen
  • Wie man die REST-API-Endpunkte mit cURL oder einem Browser testet

🏆 Errungenschaften

Nach Abschluss dieses Projekts kannst du:

  • Eine Flask-Anwendung mit SQLite als Datenbank erstellen
  • CRUD-Operationen auf Daten in einer SQLite-Datenbank mit Flask ausführen
  • REST-API-Endpunkte für eine Flask-Anwendung implementieren und testen

Erstellen der Projekt-Dateien

Beginnen wir damit, die erforderlichen Projekt-Dateien für unsere Flask-Anwendung zu erstellen.

  1. Navigiere mit cd in das Verzeichnis ~/project.
  2. Innerhalb des Projektverzeichnisses erstelle eine neue Python-Datei namens app.py.
  3. Erstelle in demselben Verzeichnis eine neue Datei namens create_database.py.
cd ~/project
touch app.py create_database.py

Deine Projektstruktur sollte wie folgt aussehen:

project/
├── app.py
└── create_database.py

Erstellen einer Beispiel-SQLite-Datenbank

Als Nächstes erstellen wir eine SQLite-Datenbank und befüllen sie mit Beispiel-Daten mithilfe von Python und der SQLite-Bibliothek.

Füge in der Datei create_database.py den folgenden Code hinzu, um die erforderlichen Module zu importieren:

import sqlite3

Füge den folgenden Code hinzu, um die Datenbank und die Tabelle zu erstellen:

## Create a connection to the database
conn = sqlite3.connect('example.db')

## Create a cursor object to execute SQL statements
cursor = conn.cursor()

## Create a table called "users"
cursor.execute('''CREATE TABLE IF NOT EXISTS users (
                    id INTEGER PRIMARY KEY,
                    name TEXT,
                    email TEXT
                )''')

Als Nächstes fügen wir einige Beispiel-Daten in die Tabelle ein:

## Insert sample data into the "users" table
users = [
    ('John Doe', '[email protected]'),
    ('Jane Smith', '[email protected]'),
    ('Bob Johnson', '[email protected]')
]
cursor.executemany('INSERT INTO users (name, email) VALUES (?,?)', users)

## Commit the changes to the database
conn.commit()

## Close the cursor and the database connection
cursor.close()
conn.close()
cd ~/project
python create_database.py

Nachdem du diesen Code ausgeführt hast, hast du eine SQLite-Datenbankdatei namens example.db mit der Tabelle "users", die die Beispiel-Daten enthält. Diese Datenbank wird in unserer Flask-Anwendung verwendet, um Daten abzurufen und zu manipulieren.

✨ Lösung prüfen und üben

Erstellen einer REST-API in Flask

Jetzt erstellen wir eine REST-API in Flask, indem wir die SQLite-Datenbank example.db verwenden, die wir zuvor erstellt haben.

Füge in der Datei app.py den folgenden Code hinzu, um die erforderlichen Module zu importieren:

from flask import Flask, jsonify, request
import sqlite3

Füge den folgenden Code hinzu, um die Flask-Anwendung zu erstellen:

## Create the Flask application
app = Flask(__name__)

Jetzt definieren wir die Endpunkte für unsere REST-API:

Endpunkt zum Abrufen aller Benutzer

## Endpoint to retrieve all users
@app.route('/users', methods=['GET'])
def get_users():
    ## Connect to the database
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()

    ## Execute the SQL query to retrieve all users
    cursor.execute('SELECT * FROM users')
    users = cursor.fetchall()

    ## Close the cursor and the database connection
    cursor.close()
    conn.close()

    ## Return the users as JSON
    return jsonify(users)

In diesem Code verbinden wir uns zunächst mit der SQLite-Datenbank mithilfe der Methode connect(). Dann erstellen wir ein Cursor-Objekt, um SQL-Anweisungen auszuführen, indem wir die Methode cursor() verwenden. Anschließend führen wir die SQL-Abfrage aus, um alle Benutzer aus der Tabelle "users" abzurufen, indem wir die Methode execute() verwenden. Schließlich schließen wir das Cursor-Objekt und die Datenbankverbindung mithilfe der Methode close() und geben die Benutzer als JSON zurück, indem wir die Methode jsonify() verwenden.

Endpunkt zum Abrufen eines bestimmten Benutzers anhand der ID

## Endpoint to retrieve a specific user by ID
@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
    ## Connect to the database
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()

    ## Execute the SQL query to retrieve the user by ID
    cursor.execute('SELECT * FROM users WHERE id =?', (user_id,))
    user = cursor.fetchone()

    ## Close the cursor and the database connection
    cursor.close()
    conn.close()

    ## Check if the user exists
    if user:
        return jsonify(user)
    else:
        return jsonify({'message': 'User not found'}), 404

Dieser Endpunkt ähnelt dem vorherigen, mit dem Unterschied, dass er einen bestimmten Benutzer anhand der ID anstatt aller Benutzer abruft. Wir verwenden die Methode fetchone(), um einen einzelnen Benutzer aus der Tabelle "users" abzurufen.

Endpunkt zum Erstellen eines neuen Benutzers

## Endpoint to create a new user
@app.route('/users', methods=['POST'])
def create_user():
    ## Get the user data from the request body
    data = request.get_json()
    name = data['name']
    email = data['email']

    ## Connect to the database
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()

    ## Execute the SQL query to insert a new user
    cursor.execute('INSERT INTO users (name, email) VALUES (?,?)', (name, email))
    conn.commit()

    ## Close the cursor and the database connection
    cursor.close()
    conn.close()

    ## Return a success message
    return jsonify({'message': 'User created successfully'})

Dieser Endpunkt wird verwendet, um einen neuen Benutzer in die Tabelle "users" einzufügen. Wir verwenden die Methode get_json(), um die Benutzerdaten aus dem Anfragekörper zu erhalten. Dann verwenden wir die Methode execute(), um den neuen Benutzer in die Tabelle "users" einzufügen.

Endpunkt zum Aktualisieren eines bestehenden Benutzers

## Endpoint to update an existing user
@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
    ## Get the updated user data from the request body
    data = request.get_json()
    name = data['name']
    email = data['email']

    ## Connect to the database
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()

    ## Execute the SQL query to update the user
    cursor.execute('UPDATE users SET name =?, email =? WHERE id =?', (name, email, user_id))
    conn.commit()

    ## Close the cursor and the database connection
    cursor.close()
    conn.close()

    ## Return a success message
    return jsonify({'message': 'User updated successfully'})

Dieser Endpunkt wird verwendet, um einen bestehenden Benutzer in der Tabelle "users" zu aktualisieren. Wir verwenden die Methode get_json(), um die aktualisierten Benutzerdaten aus dem Anfragekörper zu erhalten. Dann verwenden wir die Methode execute(), um den Benutzer in der Tabelle "users" zu aktualisieren.

Endpunkt zum Löschen eines Benutzers

## Endpoint to delete a user
@app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
    ## Connect to the database
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()

    ## Execute the SQL query to delete the user
    cursor.execute('DELETE FROM users WHERE id =?', (user_id,))
    conn.commit()

    ## Close the cursor and the database connection
    cursor.close()
    conn.close()

    ## Return a success message
    return jsonify({'message': 'User deleted successfully'})

Dieser Endpunkt wird verwendet, um einen Benutzer aus der Tabelle "users" zu löschen. Wir verwenden die Methode execute(), um den Benutzer aus der Tabelle "users" zu löschen.

Schließlich fügen wir den folgenden Code hinzu, um die Flask-Anwendung auszuführen:

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8080)
✨ Lösung prüfen und üben

Ausführen der Flask-Anwendung

Um das Projekt auszuführen und die Flask-Anwendung zu starten, öffne ein Terminal oder die Eingabeaufforderung, navigiere zum Projektverzeichnis und führe den folgenden Befehl aus:

cd ~/project
python app.py

Du solltest eine Ausgabe ähnlich der folgenden sehen:

* Serving Flask app 'app' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)

Dies bedeutet, dass die Flask-Anwendung lokal auf deinem Computer läuft. Du kannst jetzt die REST-API-Endpunkte mit einem Tool wie cURL oder einem API-Testtool wie Postman testen.

Testen der REST-API-Endpunkte

  1. Öffne ein neues Terminal oder eine neue Eingabeaufforderung.
  2. Verwende die folgenden cURL-Befehle, um jeden Endpunkt zu testen:
  • Alle Benutzer abrufen:
curl http://localhost:8080/users
  • Einen bestimmten Benutzer anhand der ID abrufen (ersetze <user_id> durch eine tatsächliche Benutzer-ID):
curl http://localhost:8080/users/<user_id>
  • Einen neuen Benutzer erstellen:
curl -X POST -H "Content-Type: application/json" -d '{"name":"John Doe","email":"[email protected]"}' http://localhost:8080/users
  • Einen bestehenden Benutzer aktualisieren (ersetze <user_id> durch eine tatsächliche Benutzer-ID):
curl -X PUT -H "Content-Type: application/json" -d '{"name":"Updated Name","email":"[email protected]"}' http://localhost:8080/users/<user_id>
  • Einen Benutzer löschen (ersetze <user_id> durch eine tatsächliche Benutzer-ID):
curl -X DELETE http://localhost:8080/users/<user_id>

Stelle sicher, dass du <user_id> durch die tatsächliche ID eines Benutzers in der Datenbank ersetzt, wenn du die entsprechenden Endpunkte testest.

Indem du diese cURL-Befehle ausführst, kannst du die Funktionalität der REST-API-Endpunkte testen und überprüfen, ob sie korrekt funktionieren.

Alternativ kannst du auf die Registerkarte Web 8080 wechseln, um die REST-API-Endpunkte über den Browser zu testen.

REST API testing interface

Mit diesen Testschritten kannst du sicherstellen, dass die Flask-Anwendung und ihre REST-API-Endpunkte wie erwartet funktionieren.

Zusammenfassung

In diesem Projekt haben wir gelernt, wie man eine REST-API in Flask mit SQLite als Datenbank erstellt. Wir haben eine Beispiel-SQLite-Datenbank erstellt und sie mit Daten befüllt. Anschließend haben wir eine Flask-Anwendung mit Endpunkten entwickelt, um Benutzer aus der Datenbank abzurufen, zu erstellen, zu aktualisieren und zu löschen. Wenn Sie den schrittweisen Anweisungen gefolgt sind, sollten Sie jetzt eine funktionierende Flask-Anwendung haben, die eine REST-API bietet, um mit der SQLite-Datenbank zu interagieren.