Python kurs bazodanowy – część 1

Python kurs bazodanowy to szybki kurs pisania prostych aplikacji bazodanowych w języku Python. Kurs jest przeznaczony dla początkujących programistów, którzy chcą rozpocząć pracę z bazami danych. W pierwszej części Python kurs bazodanowy pokazuję jak połączyć się z bazą danych PostgreSQL i wykonać proste operacje bazodanowe.

Jeśli interesujesz się bazami danych, możesz także zajrzeć do mojego artykułu o prostych aplikacjach bazodanowych w języku JAVA albo do mojego kursu Hibernate.

Python kurs bazodanowy – przygotowanie środowiska programistycznego

Pierwsza część Python kurs bazodanowy dotyczy bazy danych PostgreSQL, dostępnej bezpłatnie na stronie http://www.postgresql.org/. Bazę danych PostgreSQL należy wcześniej zainstalować lub otrzymać do niej dostęp.

Przed napisaniem pierwszego programu w języku Python łączącego się z bazą danych PostgreSQL należy zainstalować pakiet psycopg2. W zależności od używanej dystrybucji języka Python, pakiet można zainstalować ręcznie pobierając go ze strony http://initd.org/psycopg/ lub automatycznie za pomocą instalatora pip lub conda, na przykład w przypadku dystrybucji Anaconda za pomocą polecenia

conda install -c anaconda psycopg2

Python kurs bazodanowy – nawiązanie połączenia z bazą danych

Przed rozpoczęciem pracy z bazą danych PostgreSQL należy zaimportować pobrany i zainstalowany pakiet psycopg2 za pomocą polecenia

import psycopg2

Po zaimportowaniu pakietu psycopg2 można już nawiązać połączenie z bazą danych. W tym celu należy użyć funkcji connect z pakietu psycopg2. Funkcja connect wymaga podania parametrów połącznia z bazą danych, takich jak host i port określające adres serwera baz danych i port na którym on działa (na przykład host=’iprogramujesz.pl’ i port=’5432′), dbname określający nazwę bazy danych (na przykład dbname=’kurs’), user i password określające nazwę użytkownika bazy danych i jego hasło (na przykład user=’iprogramujesz.pl’ i password=’iprogramujesz.pl’). Fukcja connect zwraca obiekt klasy psycopg2.extensions.connection reprezentujący połączenie do bazy danych, ale może zwrócić błędy w przypadku problemów z nawiązaniem połączenia z bazą danych, więc warto zaimplementować obsługę wyjątków. Całość ilustruje poniższy kod (oczywiście należy w nim zmienić parametry połączenia z bazą danych).

try:
    conn = psycopg2.connect(host='serwer', port='port', dbname='baza_danych', user='uzytkownik', password='hasło')
except:
    print 'Błąd połączenia z bazą danych PostgreSQL.'

Python kurs bazodanowy – wykonanie instrukcji SQL

Po nawiązaniu połączenia z bazą danych można już wykonywać operacje bazodanowe. Instrukcje SQL można wykonywać przy pomocy obiektów klasy psycopg2.extensions.cursor, które można uzyskać za pomocą metody cursor() klasy psycopg2.extensions.connection reprezentującej połączenie do bazy danych, na przykład za pomocą polecenia

cursor = conn.cursor()

Obiekt klasy psycopg2.extensions.cursor ma metodę execute(), która służy do wykonywania instrukcji SQL. Ilustruje to poniższy kod, który na początku tworzy w bazie danych tabelę PROGRAMISTA (o ile nie została ona stworzona już wcześniej) złożoną z trzech kolumn: ID, IMIE i NAZWISKO, a następnie wypełnia tę tabelę danymi wpisując informacje o dwóch programistach.

cursor.execute("CREATE TABLE IF NOT EXISTS programista (id SERIAL PRIMARY KEY, imie VARCHAR(80), nazwisko VARCHAR(80));")
cursor.execute("INSERT INTO programista(imie, nazwisko) VALUES ('Andrzej', 'Kowalski')")
cursor.execute("INSERT INTO programista(imie, nazwisko) VALUES ('Jan', 'Nowak')")

Ważnym elementem pracy z bazą danych jest zatwierdzenie dokonanych zmian w bazie danych. Służy do tego metoda commit() klasy psycopg2.extensions.connection reprezentującej połączenie do bazy danych. W omawianym przykładzie można posłużyć się poleceniem

conn.commit()

Python kurs bazodanowy – wykonanie zapytań SQL

Wykonywanie zapytań SQL odbywa się podobnie, z tą różnicą, że wykonanie zapytania wiąże się z pobraniem danych z bazy danych. Dostęp do pobranych danych można uzyskać za pomocą metody fetchall() klasy psycopg2.extensions.cursor. Poniższy kod ilustruje pobranie wszystkich rekordów z tabeli PROGRAMISTA przez wykonanie odpowiedniego zapytania SQL za pomocą metody execute() i pobranie danych metodą fetchall().

cursor = conn.cursor()
try:
    cursor.execute("SELECT * FROM programista")
    records = cursor.fetchall()
except:
    print 'Błąd połączenia z bazą danych PostgreSQL.'

Pobrane dane można łatwo wypisać na ekran za pomocą poniższego kodu

for record in records:
    print record

Python kurs bazodanowy – przykładowy program

Dla ułatwienia poniżej przedstawiam całość omawianego programu

import psycopg2

try:
    conn = psycopg2.connect(host='serwer', port='port', dbname='baza_danych', user='uzytkownik', password='hasło')
except:
    print 'Błąd połączenia z bazą danych PostgreSQL.'

cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS programista (id SERIAL PRIMARY KEY, imie VARCHAR(80), nazwisko VARCHAR(80));")
cursor.execute("INSERT INTO programista(imie, nazwisko) VALUES ('Andrzej', 'Kowalski')")
cursor.execute("INSERT INTO programista(imie, nazwisko) VALUES ('Jan', 'Nowak')")
conn.commit()

cursor = conn.cursor()
try:
    cursor.execute("SELECT * FROM programista")
    records = cursor.fetchall()
except:
    print 'Błąd połączenia z bazą danych PostgreSQL.'

for record in records:
    print record