SQLite

De knowledge
Aller à la navigation Aller à la recherche

Lorsque on a besoin d'une base de données relationnelle c'est souvent parce qu'on souhaite y ranger de grosses quantités de données. On veut aussi y accéder à partir de machines tierces avec un accès concurrent et de bonnes performances et dans ce cas on utilisera Oracle si on est riche, PostgeSQL si on est économe et mysql/mariaDB si vraiment les besoins sont limités.

EN revanche si c'est pour stocker des données en quantité faible, sans besoin de performances élevées et sans problèmes d'accès concurrents SQLite est fait pour nous.

Installation

Linux Debian /WSL

sudo apt-get update
sudo apt-get -y install sqlite3

Suffit pour l'installation. La version :

sqlite3 --version
3.37.2 2022-01-06 13:25:41 872ba256cbf61d9290b571c0e6d82a20c224ca3ad82971edc46b29818d5dalt1

Windows

On oublie et on utilise WSL!

Utilisation

Création d'une base

La base est ce que l'on appelle un schéma dans les bases de données "riches".

Dans SQLite un base de donnée c'est... un fichier texte (essayez un cat du fichier c'est presque humainement compréhensible!) .

Pour créer une base on fait :

sqlite3 messages.db

qui nous donne le "prompt":

SQLite version 3.37.2 2022-01-06 13:25:41
Enter ".help" for usage hints.
sqlite>

Les commandes spéciales SQLite commencent par un point ".".

.help affiche ... de l'aide
.databases affiche la ou les bases de données ouvretes
.tables les tables dans la base
.schema <<table>> donne la description d'une table (la commande create table)

Création table

Pour créer une table c'est du SQL standard:

CREATE TABLE messages
(
messageId varchar(40),
timestamp varchar(30),
deviceId varchar(40)
);

Si on veut avoir la structure d'une table (desc <<table>> en Oracle) c'est .schema <<table>>

.schema messages
(
messageId varchar(40),
timestamp varchar(30),
deviceId varchar(40));

Insert

Toujours du SQL

INSERT INTO messages (messageId, timestamp, deviceId)
VALUES ('45cb96e7','2022-08-30T04:47:24','10e14c58');

Programmation

Python

Le python semble inclure sqlite en natif. En tout cas, sur mes environnements, le module sqlite3 est installé par défaut.

import sqlite3
connection=sqlite3.connect("messages.db")
cursor = connection.cursor()

cursor.execute("INSERT INTO messages (messageId, timestamp, deviceId) VALUES ('33a0ad7a','2022-08-30T11:31:47','be2721c9')")
# Ou bien
cursor.execute("INSERT INTO messages (messageId, timestamp, deviceId) VALUES (?,?,?)","33a0ad7b","2022-08-30T11:31:47","be2721c9"))

cursor.execute("SELECT * FROM messages")
rows = cursor.fetchall()

for row in rows:
    print(row)

connection.commit()
connection.close()