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

Podobne dokumenty