Bazy danych stanowią ważną część dzisiejszego programowania. Ilość dostępnych informacji eksplodowała. natomiast ich analiza może przynieść nam olbrzymie korzyści. Do czego przekonała się już nie jedna firma. Zanim jednak do tego dojdzie, trzeba je gdzieś zgromadzić i przechować. A możliwych rozwiązań jest dużo. Bardzo dużo.

Jedne bazy danych są szybkie, inne pozwalają przechowywać duże ilości danych, inne są przystosowane do przechowywania danych ustrukturyzowanych, inne do nieustrukturyzowanych itd. Jest wiele rozwiązań które ma swoje plusy i minusy.

Najpopularniejszą obecnie bazą danych jest MySQL. Jest ona darmowa i zawiera wszystko co najważniejsze w relacyjnej bazie danych. Jest ona najczęściej instalowana na serwerach. Pozwala zgrabnie zarządzać użytkownikami i świetnie nadaje się do małych oraz średniej wielkości projektów.

Ale… czasami mamy potrzebę użyć prostszego mechanizmu. Bazy danych która będzie umieszczona lokalnie z naszą aplikacją. Potencjalnie znajdującej się w jednym prostym pliku. Świetnie nadającej się również do pracy przy aplikacjach mobilnych. Mianowicie SQLite3.

SQLite 3

SQLite jest bez serwerową, relacyjną, lekką bazą danych. Znajduje się w dokładnie jednych pliku. Bardzo często wybierana jako baza dla aplikacji iOS oraz Android. Wspiera SQL.

Nie wspiera za to zarządzania użytkownikami, ani nie jest przeznaczona do równoległego jej użytkowania. Przez co staje się idealną bazą danych w momencie kiedy potrzebujemy prostej, relacyjnej bazy danych, znajdującej się przy aplikacji. Szybko.

Możemy ją traktować jako koszerną alternatywę do przechowywania lokalnych danych aplikacji w pliku. Nie jest ona absolutnie alternatywą do Oracla czy nawet MySQL.

Utworzenie bazy danych, tabeli oraz dodanie danych

Proste operacje, polegające na utworzeniu table, wstawieniu kilku wierszy, wyglądają następująco:

import sqlite3
conn = sqlite3.connect('c:/Python/BED/example.sqlite')

c = conn.cursor()

# Utwórz tabelę
c.execute('''CREATE TABLE transakcje
             (data TEXT, przedmiot_id INTEGER, cena REAL)''')

# Wstaw dane
c.execute("""INSERT INTO transakcje VALUES 
        ('2020-05-06', 36, 17.50)""")

c.execute("""INSERT INTO transakcje VALUES 
        ('2020-05-19', 18, 39.99)""")

# Zapisz zmiany
conn.commit()

# Zamknięcie połączenia z bazą danych
conn.close()

W rezultacie nasz kod, składa się z 3 głównych części:

Przygotowanie do pracy z bazą. W tym, zaimportowanie biblioteki sqlite3, połączenie się z bazą danych sqlite oraz ustawienie tzw. cursora, który jest nam potrzeby do wykonywania operacji na bazie:

import sqlite3
conn = sqlite3.connect('c:/Python/BED/example.sqlite')

c = conn.cursor()

Wykonywaniu poleceń na bazie danych, przy użyciu języka SQL. Może to być utworzenie bazy danych, tabeli, dodanie danych, odczyt danych, zmiana danych itd, na co tylko pozwala nam SQL i sama baza.

# Utwórz tabelę
c.execute('''CREATE TABLE transakcje
             (data TEXT, przedmiot_id INTEGER, cena REAL)''')

# Wstaw dane
c.execute("""INSERT INTO transakcje VALUES 
        ('2020-05-06', 36, 17.50)""")

c.execute("""INSERT INTO transakcje VALUES 
        ('2020-05-19', 18, 39.99)""")

Oraz na zapisaniu dokonanych w bazie danych zmian oraz zamknięciu połączenia z samą bazą danych sqlite.

# Zapisz zmiany
conn.commit()

# Zamknięcie połączenia z bazą danych
conn.close()

Odczyt danych z SQLite

Odczyt danych, wykonujemy analogicznie jak w powyższym przykładzie. Musimy być połączeni z bazą, posiadać kursor, natomiast to co ulega zmianie to SQL, który przekazujemy do funkcji execute:

import sqlite3
conn = sqlite3.connect('c:/Python/BED/example.sqlite')

c = conn.cursor()

for row in c.execute('SELECT * FROM transakcje ORDER BY cena'):
        print(row)

c.close()

DB browser

Przy wszelkich operacjach na bazie danych SQLite, bardzo przydatna staje się łatwa możliwość ‚podejrzenia’ naszej bazy danych. Sprawdzenia czy tabele się utworzyły, czy dane się zapisały itd.

Do tego celu, polecamy zainstalować darmowe narzędzie DB Browser.

Instalacja jest trywialna, natomiast w momencie kiedy otworzymy za jego pomocą naszą bazę danych, w naszym przypadku example.sqlite, będziemy mogli szybko sprawdzić jak wygląda:

Podsumowując.

Jeżeli szukamy, prostej, lekkiej bazy danych, która nie będzie użytkowana przez wielu użytkowników, SQLite3 jest potencjalnie dla nas. Nie oznacza to że w każdej sytuacji poradzimy sobie bez serwerowych baz jak MySQL czy PostgreSQL, aczkolwiek SQLite jest przez swoją prostotę bardzo atrakcyjne i tam gdzie nie ma wygórowany wymagań, człowiek naturalnie po nią sięga.