You are on page 1of 40

Kurs jzyka Python Wykad 7.

Bazy danych: Bazy danych typu dbm Bazy danych w architekturze klient-serwer

Trjwarstwowy model aplikacji

Interfejs uytkownika

Logika aplikacji

Baza danych

Dostpne bazy danych


Dbm Klient-serwer (SQL) Oracle dbm GNU's dbm Berkeley DB SQLite Firebird DB/2 MySQL PostgreSQL

Bazy danych typu Dbm


Database manager: Dane przechowywane s w pliku, ktry przypomina sownik Dostp do danych jest po kluczu Warto zwykle moe by tylko napisem Implementacja: zwykle tablice haszujce i b-drzewa Brak odrbnego serwera, dane pamitane s w lokalnym pliku

Dostpne moduy

dbm - (n)dbm gdbm GNU's dbm bsddbm Berkeley DBM hashdb

Dostp do BD
import anydbm db = anydbm.open('/tmp/plik', 'c') db['jeden'] = 'one' db['trzy'] = 'three' del db['trzy'] db.close()

Przegldanie

db = anydbm.open('/tmp/plik') for k, v in db.iteritems(): print k, '\t', v db.close()

Wady

Dziaa tylko dla niewielkich danych

Powd

db.iteritems()

Inny sposb przetwarzania

Dwie metody obiektu db: first() next() Zwracaj par (klucz, warto)

Inny sposb przetwarzania, cd


db = anydbm.open('/tmp/plik') elem = db.first() while elem: try: elem = db.next() except KeyError: break db.close()

dbm zachowuje si jak sownik!

if 'klucz' in db: print db['klucz'] # gdy nie ma klucza, KeyError

Wic skoro to sownik:

for x in db: print x, db[x]

Berkeley DB modu bsddb

Waciwoci: Transakcje Replikacja Blokowanie rekordw

Typy plikw tablica haszujca


import bsddb db = bsddb.hashopen('dbm', 'c') ...

Typy plikw b-drzewa

import bsddb db = bsddb.btopen('dbm', 'c') ...

B-drzewa

Wartoci zwracane s w kolejnoci alfabetycznej

Numerowane rekordy

Kluczami s liczby naturalne (numery rekordw) Numery zaczynaj si od 1

Inne poyteczne metody

last() previous() sync() has_key(klucz)

Ciekawostka

import bsddb bsddb.hashopen(None) bsddb.btopen(None) bsddb.rnopen(None)

Do czego uywa si Berkeley DB

OpenLDAP Subversion Spamassasin KDevelop

A jak przechowywa obiekty?

Pakiet shelve: pliki s sownikami kluczami s stringi, warociami: obiekty (rwnie listy itp) sync()

Przykad
import shelve db = shelve.open('dane.db') db['lista'] = [2,3,5,7,11] db.close()

Serwery baz danych

Oracle DB/2 MySQL PostgreSQL MS SQL ...

Python Database API Specification

Zunifikowany interfejs dostpu do rnych silnikw relacyjnych baz danych Wersja 1.0 i 2.0

Otwarcie poczenia z bd
Funkcja connect('parametry') zwraca obiekt connection.

Przykad (MySQL)

import MySQLdb db = connect(host='localhost', db='baza_testowa', user='user', passwd='********')

Zamknicie

db.close()

SQL-owe bazy danych

Zapytanie SQL

aplikacja
Lista wierszy

Serwer bazy danych

Wysanie zapytania SQL

kursor = db.cursor() kursor.execute('SELECT * FROM Studenci')

Odczytanie wyniku

row = kursor.fetchrow() while row: print row # lista row = kursor.fetchrow()

Atrybuty kursora

description: lista opisw poszczeglnych kolumn odpowiedzi rowcount: liczba wierszy w odpowiedzi lub liczba przetworzonych wierszy (w przypadku INSERT czy UPDATE)

DB API

DB API definiuje take list wyjtkw wraz z zaleceniem, kiedy dany wyjtek jest zgaszany.

SQLite

'Dyskowa' baza danych nie wymaga zewntrznego serwera, nie wymaga kontaktu z adminem itp. sqlite (lub sqlite3): API do SQLite Sqlite implementuje DB API 2.0

Przykad

import sqlite db = sqlite.connect('/tmp/plik')

Zaoenie tabeli
kursor = db.cursor() kursor.execute('''create table Ksiegozbior (Autor text, Tytul text, RokWyd int, cena real)''') kursor.commit()

Wstawienie rekordu

kursor.execute('''insert into Ksiegozbior values ('Mickiewicz', 'Pan Tadeusz', 2003, 25.5)''')

Odczyt danych

kursor.execute('SELECT * FROM Ksiegozbior') for row in kursor: print row

Ciekawostka

db = sqlite.connect(':memory:')

KONIEC

You might also like