📘 od plików płsakich 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.
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
dane_osobowe
adres
produkty
0
Andrzej Wiśniewski
ul. Parkowa , Tychy
Telefon
1
Michał Szymański
ul. Długa ,
Klawiatura
2
Monika Grabowska
ul. Lipowa 44, Lublin
Monitor, Kamera internetowa, Mysz, Router
3
Paweł Nowak
ul. Orla 50, 30-400 Warszawa
Laptop, Słuchawki, Router, Drukarka
4
Michał Wieczorek
ul. Różana 23, Kraków
Mysz, Telefon
5
Andrzej Kubiak
ul. Słoneczna , 80-001
Tablet, Drukarka
6
Rafał Nowak
ul. Lipowa , Kraków
Monitor, Laptop, Mysz, Tablet
7
Monika Kubiak
ul. Długa ,
Mysz, Telefon
8
Agnieszka Wójcik
ul. Mickiewicza ,
Mysz
9
Tomasz Zając
ul. Szkolna , 43-100 Szczecin
Klawiatura
# Zamknięcie połączeniaconn.close()
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 ( id_klienci INTEGERPRIMARYKEY AUTOINCREMENT, dane_osobowe TEXT, -- pole z imieniem i nazwiskiem adres TEXT, -- pole z pełnym adresem produkty TEXT -- pole z produktami, w wersji nienormalizowanej);
INSERT przykładowego rekordu do demonstracji działania