Module SQLite3 Python
Le module sqlite3 vous permet d’utiliser des bases de données SQLite directement depuis Python, sans serveur de base de données séparé.
import sqlite3
SQLite est un bon choix pour les petites applications, les outils locaux, les tests et l’apprentissage de SQL. La base de données peut tenir dans un seul fichier, ou uniquement en mémoire avec ':memory:'.
Se connecter à une base de données
SQLite peut créer automatiquement le fichier de base de données s’il n’existe pas.
import sqlite3
connection = sqlite3.connect(':memory:')
print(type(connection).__name__)
Connection
Créer une table et insérer des lignes
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()
Utilisez des paramètres de substitution plutôt que de formater manuellement des chaînes SQL.
WARNING
Ne construisez pas vos requêtes SQL en concaténant des entrées utilisateur. Utilisez des paramètres de substitution comme ? pour éviter les injections SQL.
Interroger des lignes
rows = cursor.execute('SELECT name, age FROM users ORDER BY age').fetchall()
print(rows)
[('Ada', 36), ('Grace', 40)]
Utiliser des objets Row
Row vous permet d’accéder aux colonnes par leur nom.
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
Utiliser un gestionnaire de contexte
La connexion peut être utilisée avec with afin que les modifications soient validées automatiquement s’il n’y a pas d’erreur.
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',)]