Python
Transkrypt
Python
Python Data bases Marcin Młotkowski 8th May, 2013 DBM databases Object persistence SQL data bases and data engines 1 DBM databases 2 Object persistence 3 SQL data bases and data engines Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines Types of data storage Klient-serwer SQL Trwałe słowniki Oracle Bekreley DB Firebird MySQL Gnu dbm Sqlite PostgeSQL (n)dbm Marcin Młotkowski DB/2 Python DBM 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!!! Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines How to use DBM db[’jeden’] = ’one’ db[’dwa’] = ’two’ if ’trzy’ in db: del db[’trzy’] Marcin Młotkowski Python 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() Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines Available modules Python 2.* dumbdb bsddb (dbhash) dbm gdbm Python 3.* dbm.dumb — dbm.ndbm dbm.gnu Marcin Młotkowski Description slow, but pure Python implementation implementation of Berkeley DB API to U*X (n)dbm extension of dbm Python DBM databases Object persistence SQL data bases and data engines How to process entire collection for key in db.keys(): print db[key] Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines How to process entire collection for key in db.keys(): print db[key] Warning All file must be kept in memory. Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines Collection processing, dumbdbm for key in db: print ’db[’, key, ’] =’, db[key] db.close() Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines Collection processing dbhash print db.first() while True: try: el = db.next() print el except KeyError: break gdbm k = db.firstkey() while k != None: print k k = db.nextkey(k) Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines Available modules dumbdbm (n)dbm gdbm dbhash for–in X — — — firstkey(), nextkey() — — X — Marcin Młotkowski Python first(), next() — — — X DBM databases Object persistence SQL data bases and data engines how to deal with this mess Use generic package anydbm Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines how to deal with this mess Use generic package anydbm Use package whichdbm: >>> import anydbm >>> whichdb.whichdb(’plik.db’) Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines Berkeley DB Who use Berkeley DB? OpenLDAP, Subversion, Spamassasin, KDevelop, ... Features: transactions; replication; record locking; keys: positive integers. Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines How to store object? shelve package Shelve file is a dictionary, i.e. list of pairs (string, object) Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines shelve package Example import shelve db = shelve.open(’dane.db’) db[’a_list’] = [2,3,5,7,11] db.sync() del db[’an_object’] db.close() Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines Database engines Oracle DB/2 MySQL PostgreSQL MSSQL ... Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines DB API Python Database API Specification A unified API (methods and fields) to different database engines. Current version: 2.0. Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines Opening connection to database connect(’parameters’) # returns an object Connection Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines Opening connection to database connect(’parameters’) # returns an object Connection MySQL import MySQLdb db = MySQLdb.connect(host=’localhost’, db=’testing’, user=’user’, passwd=’123456’) Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines Closing connection db.close() Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines Communication with database send a query wynik = db.cursor() wynik.execute(’SELECT * FROM Students’) Marcin Młotkowski Python 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() while row: print row row = wynik.fetchone() Optional wynik.close() Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines 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 ... Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines DB API - additional information Standard exceptions: Warning, DatabaseError, NotSupportedError, ... Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines SQLite ’File’ database, no external server, no contact with admin; module: sqlite3 Implements DB API 2.0 with extensions Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines Sqlite usage Table creation import sqlite3 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() Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines Sqlite usage Insert row into table kursor.execute(” ’insert into Library values (’Shakespeare’, ’Hamlet’, 2003, 25.5)” ’) Marcin Młotkowski Python 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’) for row in kursor: print row Marcin Młotkowski Python DBM databases Object persistence SQL data bases and data engines Sqlite Curiosity db = sqlite.connect(’:memory:’) Marcin Młotkowski Python