Python - Datenbankzugriff

Hallo dort, ehrgeizige Python-Programmierer! Ich bin begeistert, Ihr Führer auf dieser aufregenden Reise in die Welt des Datenbankzugriffs mit Python zu sein. Als jemand, der seit Jahren Programmierung lehrt, kann ich Ihnen versichern, dass diese Fähigkeit nicht nur unerlässlich, sondern auch unglaublich bereichernd ist. Also, lasst uns Tauchen und die Geheimnisse der Datenbankmanipulation mit Python entschlüsseln!

Python - Database Access

Datenbankzugriff in Python

Stellen Sie sich vor, Sie organisieren eine riesige Bibliothek. Sie haben Tausende von Büchern und benötigen ein System, um sie alle zu verfolgen. Das ist im Grunde genommen, was eine Datenbank tut, aber für digitale Informationen. Python, als die vielseitige Sprache, die es ist, bietet mehrere Möglichkeiten, mit Datenbanken zu interagieren. Heute werden wir uns auf zwei beliebte Methoden konzentrieren: die Verwendung des sqlite3-Moduls für SQLite-Datenbanken und des PyMySQL-Moduls für MySQL-Datenbanken.

Das sqlite3-Modul

SQLite ist wie eine mini Datenbank, die mit Python integriert ist. Es ist perfekt für kleine Anwendungen oder wenn Sie gerade erst anfangen. Beginnen wir mit dem Importieren des Moduls:

import sqlite3

Diese Zeile ist wie Python sagen, "Hey, wir werden mit SQLite-Datenbanken arbeiten, also werde bereit!"

Das Verbindungsobjekt

Um mit einer Datenbank zu arbeiten, müssen wir zuerst eine Verbindung zu ihr herstellen. Stellen Sie sich das vor, als ob Sie an die Tür Ihrer digitalen Bibliothek klopfen. So geht das:

conn = sqlite3common("example.db")

Diese Zeile erstellt eine neue Datenbankdatei namens "example.db", wenn sie nicht existiert, oder öffnet sie, wenn sie existiert. Die conn-Variable ist是我们的 Schlüssel zu dieser Datenbank.

Das Cursor-Objekt

Nun, da wir in unserer digitalen Bibliothek sind, benötigen wir eine Möglichkeit, uns zu bewegen und Dinge zu manipulieren. Das macht ein Cursor. Lassen Sie uns einen erstellen:

cursor = conn.cursor()

Stellen Sie sich den Cursor als Ihren Bibliothekar-Assistenten vor, der bereit ist, Informationen auf Ihre Anweisung abzurufen oder zu verändern.

Erstellen einer Datenbanktabelle

Lassen Sie uns eine Tabelle erstellen, um einige Informationen zu speichern. Stellen Sie sich vor, wir katalogisieren Bücher:

cursor.execute('''CREATE TABLE IF NOT EXISTS books
(id INTEGER PRIMARY KEY,
title TEXT,
author TEXT,
year INTEGER)''')

Dieser SQL-Befehl erstellt eine Tabelle namens "books" mit Spalten für id, title, author und year. Der IF NOT EXISTS-Teil stellt sicher, dass wir keine doppelten Tabellen erstellen.

INSERT-Operation

Jetzt fügen wir einige Bücher zu unserer Datenbank hinzu:

cursor.execute("INSERT INTO books (title, author, year) VALUES (?, ?, ?)",
("To Kill a Mockingbird", "Harper Lee", 1960))
conn.commit()

Dies fügt ein neues Buch in unsere Tabelle ein. Die ?-Markierungen sind Platzhalter für unsere Daten, die helfen, SQL-Injektionsangriffe zu verhindern (ein Thema für einen anderen Tag!). Die commit()-Methode speichert unsere Änderungen.

READ-Operation

Lassen Sie uns einige Daten abrufen:

cursor.execute("SELECT * FROM books")
books = cursor.fetchall()
for book in books:
print(f"ID: {book[0]}, Title: {book[1]}, Author: {book[2]}, Year: {book[3]}")

Dies holt alle Bücher und druckt sie aus. Es ist wie unsere Fragen an unseren Bibliothekar, alle Bücher, die wir haben, zu zeigen.

Update-Operation

Müssen Sie einige Informationen korrigieren? Kein Problem:

cursor.execute("UPDATE books SET year = ? WHERE title = ?", (1925, "The Great Gatsby"))
conn.commit()

Dies aktualisiert das Erscheinungsjahr von "The Great Gatsby". Denken Sie immer daran, Ihre Änderungen zu committen!

DELETE-Operation

Manchmal müssen wir Einträge entfernen:

cursor.execute("DELETE FROM books WHERE author = ?", ("J.K. Rowling",))
conn.commit()

Dies entfernt alle Bücher von J.K. Rowling aus unserer Datenbank. Seien Sie vorsichtig mit DELETE-Operationen - es gibt keinen Undo-Button in Datenbanken!

Durchführung von Transaktionen

Transaktionen sind eine Möglichkeit, Operationen zusammenzufassen. Wenn eine Operation fehlschlägt, werden alle abgebrochen. Es ist wie eine "Alles oder nichts"-Ansatz:

try:
conn.execute("BEGIN TRANSACTION")
cursor.execute("INSERT INTO books (title, author, year) VALUES (?, ?, ?)",
("1984", "George Orwell", 1949))
cursor.execute("INSERT INTO books (title, author, year) VALUES (?, ?, ?)",
("Animal Farm", "George Orwell", 1945))
conn.commit()
print("Transaction successful!")
except sqlite3.Error as e:
conn.rollback()
print(f"An error occurred: {e}")

COMMIT-Operation

Wir haben die commit()-Methode in unseren Beispielen verwendet. Es ist entscheidend, um unsere Änderungen in der Datenbank zu speichern. Ohne sie wären unsere Änderungen verloren, wenn wir die Verbindung schließen.

ROLLBACK-Operation

Wenn während einer Transaktion etwas schief geht, können wir rollback() verwenden, um alle Änderungen seit dem letzten Commit rückgängig zu machen:

try:
# Some database operations
conn.commit()
except sqlite3.Error:
conn.rollback()

Das PyMySQL-Modul

Während SQLite großartig für das Lernen und kleine Anwendungen ist, verwenden viele reale Projekte robuster Datenbanken wie MySQL. Lassen Sie uns einen kurzen Blick auf die Verwendung von PyMySQL werfen:

import pymysql

conn = pymysql.connect(host='localhost',
user='your_username',
password='your_password',
database='your_database')

try:
with conn.cursor() as cursor:
sql = "INSERT INTO users (email, password) VALUES (%s, %s)"
cursor.execute(sql, ('[email protected]', 'very-secret'))
conn.commit()
finally:
conn.close()

Die grundlegenden Prinzipien sind ähnlich wie bei SQLite, aber PyMySQL ermöglicht es uns, auf Remote-MySQL-Datenbanken zu verbinden.

Fehlerbehandlung

Die Fehlerbehandlung ist entscheidend, wenn man mit Datenbanken arbeitet. Verwenden Sie immer try-except-Blöcke, um potenzielle Fehler zu fangen und zu behandeln:

try:
# Database operations here
except sqlite3.Error as e:
print(f"An error occurred: {e}")
finally:
conn.close()

Dies stellt sicher, dass wir Fehler elegant behandeln und immer unsere Datenbankverbindung schließen, auch wenn ein Fehler auftritt.

Hier ist eine Tabelle, die die Hauptdatenbankoperationen zusammenfasst, die wir behandelt haben:

Operation Beschreibung Beispiel
Connect Eine Verbindung zur Datenbank herstellen conn = sqlite3common("example.db")
Create Eine neue Tabelle oder einen Datensatz erstellen cursor.execute("CREATE TABLE...")
Insert Neue Datensätze zu einer Tabelle hinzufügen cursor.execute("INSERT INTO...")
Select Daten aus der Datenbank abrufen cursor.execute("SELECT...")
Update Bestehende Datensätze ändern cursor.execute("UPDATE...")
Delete Datensätze aus einer Tabelle entfernen cursor.execute("DELETE FROM...")
Commit Änderungen in der Datenbank speichern conn.commit()
Rollback Änderungen seit dem letzten Commit rückgängig machen conn.rollback()

Und so ist es! Sie haben gerade Ihre ersten Schritte in die Welt des Datenbankzugriffs mit Python gemacht. Denken Sie daran, dass Übung macht den Meister, also experimentieren Sie nicht scheuen mit diesen Konzepten. Bevor Sie es sich versehen, werden Sie Daten wie ein Profi verwalten! Frohes Coden, und möge Ihre Datenbanken immer organisiert und fehlerfrei sein!

Credits: Image by storyset