Data bases
Marcin Młotkowski
DBM databases Object persistence SQL data bases and data engines
1 DBM databases
2 Object persistence
3 SQL data bases and data engines
Types of data storage
Bekreley DB (n)dbm Gnu dbm Trwałe słowniki Oracle DB/2 MySQL PostgeSQL Firebird Sqlite Klient-serwer SQLDBM databases
Object persistence SQL data bases and data engines
DBM databases
Database manager
Data is stored in file being a hashtable Values are accessed by keys
Usually, value can be only of type string
Implementation: standard hash tables and b-trees No server, all in one file
Fast!!!
DBM databases
Object persistence SQL data bases and data engines
How to use DBM
db =<modul>.open(’storage.dbm’, ’c’) db[’jeden’] = ’one’ db[’dwa’] = ’two’ if ’trzy’in db: del db[’trzy’] db.close()DBM databases
Object persistence SQL data bases and data engines
How to use DBM
import<modul> db =<modul>.open(’storage.dbm’, ’c’) db[’jeden’] = ’one’ db[’dwa’] = ’two’ if ’trzy’in db: del db[’trzy’] db.close()Available modules
Python 2.* Python 3.* Description
dumbdb dbm.dumb slow, but pure Python implementation
bsddb (dbhash) — implementation of Berkeley DB
dbm dbm.ndbm API to U*X (n)dbm
DBM databases
Object persistence SQL data bases and data engines
How to process entire collection
forkey in db.keys():
print db[key]
Warning
All file must be kept in memory.
How to process entire collection
forkey in db.keys():
print db[key] Warning
DBM databases
Object persistence SQL data bases and data engines
Collection processing, dumbdbm
forkey in db:
print ’db[’, key, ’] =’, db[key] db.close()
Collection processing
dbhash printdb.first() whileTrue: try: el = db.next() print el except KeyError: break gdbm k = db.firstkey() whilek != None: print k k = db.nextkey(k)DBM databases
Object persistence SQL data bases and data engines
Available modules
for–in firstkey(), nextkey() first(), next()
dumbdbm X — —
(n)dbm — — —
gdbm — X —
dbhash — — X
DBM databases
Object persistence SQL data bases and data engines
how to deal with this mess
Use generic packageanydbm
>>>importanydbm
DBM databases
Object persistence SQL data bases and data engines
how to deal with this mess
Use generic packageanydbm
Use packagewhichdbm:
>>>importanydbm
>>>whichdb.whichdb(’plik.db’)
Berkeley DB
Who use Berkeley DB?
OpenLDAP, Subversion, Spamassasin, KDevelop, ... Features:
transactions; replication; record locking;
DBM databases
Object persistence
SQL data bases and data engines
How to store object?
shelvepackage
Shelve file is a dictionary, i.e. list of pairs(string, object)
shelve package
Example importshelve db = shelve.open(’dane.db’) db[’a_list’] = [2,3,5,7,11] db.sync() deldb[’an_object’] db.close()DBM databases Object persistence
SQL data bases and data engines
Database engines
Oracle DB/2 MySQL PostgreSQL MSSQL ...DB API
Python Database API Specification
A unified API (methods and fields) to different database engines. Current version: 2.0.
DBM databases Object persistence
SQL data bases and data engines
Opening connection to database
connect(’parameters’) # returns an object Connection
MySQL importMySQLdb db = MySQLdb.connect(host=’localhost’, db=’testing’, user=’user’, passwd=’123456’)
Opening connection to database
connect(’parameters’) # returns an object Connection
MySQL importMySQLdb db = MySQLdb.connect(host=’localhost’, db=’testing’, user=’user’, passwd=’123456’)
DBM databases Object persistence
SQL data bases and data engines
Closing connection
db.close()
DBM databases Object persistence
SQL data bases and data engines
Communication with database
send a query
wynik = db.cursor()
wynik.execute(’SELECT * FROM Students’)
row = wynik.fetchone() whilerow: print row row = wynik.fetchone() Optional wynik.close()
DBM databases Object persistence
SQL data bases and data engines
Communication with database
send a query
wynik = db.cursor()
wynik.execute(’SELECT * FROM Students’) Fetching a result row = wynik.fetchone() whilerow: print row row = wynik.fetchone() Optional wynik.close()
A result
Result attributes (an object of the class Cursor): description: describes columns
rowcount: number of returned or processed (e.g. INSERT or UPDATE)rows
DBM databases Object persistence
SQL data bases and data engines
DB API - additional information
Standard exceptions:
Warning, DatabaseError, NotSupportedError, ...
SQLite
’File’ database, no external server, no contact with admin; module: sqlite3
DBM databases Object persistence
SQL data bases and data engines
Sqlite usage
Table creation
importsqlite3
db = sqlite.connect(’/tmp/temp.db’) kursor = db.cursor()
kursor.execute(” ’create table Library
(Author text, Title text, publish_year int, price real)” ’) kursor.commit()
Sqlite usage
Insert row into table
kursor.execute(” ’insert into Library values (’Shakespeare’, ’Hamlet’, 2003, 25.5)” ’)
DBM databases Object persistence
SQL data bases and data engines
Sqlite usage
Fetching data (extension of DB API 2.0) kursor.execute(’SELECT * FROM Library’)
forrow in kursor:
print row
Sqlite
Curiosity