Python SQLite3 Modul

Das sqlite3-Modul erlaubt dir, SQLite-Datenbanken direkt aus Python zu verwenden, ohne einen separaten Datenbankserver.

import sqlite3

SQLite ist eine gute Wahl für kleine Anwendungen, lokale Werkzeuge, Tests und zum Lernen von SQL. Die Datenbank kann in einer einzelnen Datei liegen oder nur im Speicher mit ':memory:'.

Mit einer Datenbank verbinden

SQLite kann die Datenbankdatei automatisch erstellen, wenn sie nicht existiert.

import sqlite3

connection = sqlite3.connect(':memory:')
print(type(connection).__name__)
Connection

Eine Tabelle erstellen und Zeilen einfügen

import sqlite3

connection = sqlite3.connect(':memory:')
cursor = connection.cursor()

cursor.execute('CREATE TABLE users (name TEXT, age INTEGER)')
cursor.execute('INSERT INTO users VALUES (?, ?)', ('Ada', 36))
cursor.execute('INSERT INTO users VALUES (?, ?)', ('Grace', 40))
connection.commit()

Verwende Platzhalter statt SQL-Strings manuell zusammenzusetzen.

WARNING

Baue SQL-Abfragen nicht durch das Verketten von Benutzereingaben. Verwende Platzhalter wie ?, um SQL-Injection-Fehler zu vermeiden.

Zeilen abfragen

rows = cursor.execute('SELECT name, age FROM users ORDER BY age').fetchall()
print(rows)
[('Ada', 36), ('Grace', 40)]

Row-Objekte verwenden

Row erlaubt dir, Spalten über ihren Namen anzusprechen.

connection = sqlite3.connect(':memory:')
connection.row_factory = sqlite3.Row
cursor = connection.cursor()
cursor.execute('CREATE TABLE projects (name TEXT)')
cursor.execute('INSERT INTO projects VALUES (?)', ('python-cheatsheet',))
row = cursor.execute('SELECT name FROM projects').fetchone()
print(row['name'])
python-cheatsheet

Einen Kontextmanager verwenden

Die Verbindung kann mit with verwendet werden, damit Änderungen bei Fehlerfreiheit automatisch übernommen werden.

import sqlite3

with sqlite3.connect(':memory:') as connection:
    connection.execute('CREATE TABLE notes (body TEXT)')
    connection.execute('INSERT INTO notes VALUES (?)', ('Learn sqlite3',))
    rows = connection.execute('SELECT body FROM notes').fetchall()

print(rows)
[('Learn sqlite3',)]