📘 Od plików płaskich do systemów zarządzania bazami danych
Zanim zaczniemy korzystać z profesjonalnych systemów zarządzania bazami danych (DBMS), warto zrozumieć, dlaczego są one potrzebne. Na początku dane często przechowuje się w plikach tekstowych, np. CSV (Comma Separated Values). Pliki te można łatwo tworzyć i edytować, np. w Excelu, LibreOffice czy nawet w Notatniku.
Jednak takie „proste bazy plikowe” mają swoje ograniczenia:
brak kontroli poprawności danych (np. brak numeru domu, kodu pocztowego lub miejscowości),
trudność w wyszukiwaniu i filtrowaniu danych,
brak powiązań między danymi (relacji),
ryzyko duplikacji i błędów,
problemy przy równoczesnym dostępie wielu użytkowników.
Relacyjne systemy baz danych, takie jak PostgreSQL czy SQLite, rozwiązują te problemy. Dane są tam przechowywane w tabelach o jasno określonej strukturze (kolumny, typy danych), a system dba o integralność i spójność informacji. Zanim jednak przejdziemy do PostgreSQL, przyjrzyjmy się, jak wygląda „prosta baza plikowa” i jak można ją przekształcić w prawdziwą bazę danych.
Plikowa baza danych - SQLite
Jak wspomniano na wykładzie, dane można gromadzić w różnego rodzaju bazach danych. Często jednak potrzebne jest nam szybkie i łatwe rozwiązanie, bez konieczności mozolnego budowania architektury klient-serwer. Chcemy bowiem przechowywać dane w prostym pliku i edytować je równie łatwo jak w przypadku dokumentu tekstowego, takiego jak w programie Word. W takich przypadkach najbardziej optymalne jest użycie właśnie SQLite. SQLite jest najczęściej wykorzystywanym na świecie systemem zarządzania bazą danych. Został zastosowany w iPhonach, iPadach, w urządzeniach z systemem operacyjnym Android i Windows Mobile. Znajdziesz go również w termostatach, a także w samochodowych systemach komputerowych. Jest też wykorzystywany w satelitach i w wielu innych nowoczesnych urządzeniach, w przypadku których konieczne jest przechowywanie danych i proste ich przeszukiwanie. Z SQLite korzysta w dużym stopniu zarówno system operacyjny Windows, jak i system samolotu Airbus A350 XWB. Jest on więc stosowany wszędzie tam, gdzie istotna jest łatwość korzystania z niego oraz niskie koszty stałe. Jest również doskonały do przygotowywania prototypów baz danych dla przedsiębiorstw. Jednak coś za coś — z uwagi na brak serwera zarządzającego dostępem do bazy danych SQLite nie może być jednocześnie wykorzystywany przez wielu użytkowników. Nie jest bowiem możliwe edytowanie tego samego pliku przez wiele osób w tym samym czasie. Ten system zarządzania bazą danych nadaje się natomiast świetnie do celów szkoleniowych.
import sqlite3import csv# Połączenie z bazą (plik .db zostanie utworzony, jeśli nie istnieje)conn = sqlite3.connect("klienci.db")cur = conn.cursor()# Utworzenie tabelicur.execute("""CREATE TABLE IF NOT EXISTS klienci ( dane_osobowe TEXT, adres TEXT, produkty INTEGER);""")# Wczytanie danych z pliku CSVwithopen("klienci_produkty_v2.csv", newline='', encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile)for row in reader: cur.execute(""" INSERT INTO klienci (dane_osobowe, adres, produkty) VALUES (?, ?, ?) """, (row['dane_osobowe'], row['adres'], row['produkty']))# Zapisanie zmian i zamknięcie połączeniaconn.commit()conn.close()print("Dane zostały zaimportowane do bazy danych klienci.db")
Dane zostały zaimportowane do bazy danych klienci.db
import sqlite3import pandas as pddb_file ="klienci.db"# Połączenie z bazą SQLite (plik zostanie utworzony jeśli nie istnieje)conn = sqlite3.connect(db_file)cur = conn.cursor()# Pobranie 10 pierwszych rekordów do DataFramedf = pd.read_sql_query("SELECT * FROM klienci LIMIT 10;", conn)# Wyświetlenie DataFramedf
id
dane_osobowe
adres
produkty
0
1
Katarzyna Wiśniewski
ul. Lipowa 1,
Słuchawki, Router, Drukarka, Telefon
1
2
Anna Grabowska
ul. Mickiewicza ,
Telefon, Laptop, Kamera internetowa, Słuchawki
2
3
Marek Czerwińska
ul. Słoneczna ,
Router
3
4
Piotr Król
ul. Szkolna 27,
Monitor, Tablet, Klawiatura
4
5
Marek Kowalski
ul. Polna ,
Monitor
5
6
Michał Wójcik
ul. Spacerowa 30,
Mysz, Monitor
6
7
Anna Baran
ul. Lipowa , 30-400
Mysz
7
8
Adam Kowalski
ul. Mickiewicza , 60-100
Monitor, Drukarka
8
9
Marek Czerwińska
ul. Lipowa , 35-100 Poznań
Laptop, Słuchawki, Router
9
10
Paweł Pawlak
ul. Spacerowa ,
Mysz, Kamera internetowa, Laptop
# Zamknięcie połączeniaconn.close()
obrazek
Nowa baza “wyklikana”
Nowa baza z pliku
Prosty kod sql
Załadowanie tabel i danych z kodu pliku sql
DDL w SQLite
1. Tworzenie tabeli klienci
Tworzymy tabelę, jeśli jeszcze nie istnieje
CREATETABLEIFNOTEXISTS klienci (idINTEGERPRIMARYKEY AUTOINCREMENT, dane_osobowe TEXT, -- pole z imieniem i nazwiskiem adres TEXT, -- pole z pełnym adresem produkty TEXT -- pole z produktami, w wersji nienormalizowanej (lista w jednej komórce));
INSERT przykładowego rekordu do demonstracji działania