Flask MySQL Datenbank?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Flask-SQLAlchemy wäre eine gute Option. Diese Flask-Erweiterung stellt ein Interface zur Verfügung, damit Datenbankanfragen nicht mehr selbst mit SQL formuliert werden müssen. So wird die Kommunikation einfacher und weniger fehleranfällig.

Ansonsten solltest du nach einer Bibliothek oder Flask-Erweiterung suchen, die auf jeden Fall parametisierte Anfragen (also prepared statements) unterstützt. So wie es flask_mysqldb tut.

Dazu ein kleines Beispiel:

from flask_mysqldb import MySQL
 
app = Flask(__name__)
app.config["MYSQL_HOST"] = "..."
app.config["MYSQL_USER"] = "..."
app.config["MYSQL_PASSWORD"] = "..."
app.config["MYSQL_DB"] = "..."
 
mysql = MySQL(app)

@app.route("/savesomething")
def save_something():
  cursor = mysql.connection.cursor()
  cursor.execute(""" INSERT INTO persons VALUES (%s, %s)""", ("John Doe", str(31)))
  mysql.connection.commit()
  cursor.close()
  return "Person saved"

Ein paar Tipps für eine sichere Kommunikation:

  • Die Datenbank sollte nur für die Webanwendung (und den Serveradministrator) erreichbar sein.
  • Der Root-Nutzer sollte geändert werden (mindestens das Passwort). Das Rechtesystem der Datenbank (jeder Datenbanknutzer bekommt nur die für ihn notwendigen Rechte) sollte genutzt werden.
  • In meinem obigen Beispiel stehen die Verbindungsdaten zwar im Code, doch noch besser wäre es, sie würden aus einer Datei ausgelesen werden, die außerhalb des Webroots liegt (der Webserver braucht natürlich dennoch Zugriff auf die Datei).
  • Speichere Daten stets im UTF-8-Format ab (Bei MySQL-DBs nennt sich die Kodierung utf8mb4), denn es ist eine stabile, vergleichsweise sichere Zeichenkodierung.
  • Validiere alle Daten, die von außen kommen (also über einen Request geliefert wurden). Verwende immer parameterisierte Queries, denn bei denen werden die Platzhalterwerte implizit richtig maskiert.

Um mit Datenbanken in Python zu arbeiten gibt es verschiedene Bibliotheken; zum Beispiel sqlalchemy: https://www.sqlalchemy.org/

Kugelfisch647 
Fragesteller
 14.03.2023, 21:28

Ich würde gerne weiterhin die SQL Befehle nutzen, gibt es da auch eine Möglichkeit? Ich habe es mit flask-mysql versucht, allerdings kann ich es nicht importieren.

0