1+ '''
2+ Created on Aug 9, 2017
3+
4+ @author: sayalik157
5+ '''
6+
7+ import sqlite3 # python lib for sqlite3 database handling
8+
9+ class database :
10+ def __init__ (self , ** kwargs ):
11+ # note: because of decorators _filename and _table are set from filename and file respectively
12+ self .filename = kwargs .get ('filename' )
13+ self .table = kwargs .get ('table' , 'test' ) # default tablename set as 'test'
14+
15+ def sql_do (self , sql , * params ):
16+ # arbitrary number of *params are given incase more parameters are needed for 'sql' command
17+ self ._db .execute (sql , params ) # execute sql command on database
18+ self ._db .commit ()
19+
20+ def insert (self , row ): # inserting a row in database
21+ self ._db .execute ('insert into {} (t1, i1) values (?, ?)' .format (self ._table ), (row ['t1' ], row ['i1' ]))
22+ self ._db .commit ()
23+
24+ def retrieve (self , key ): # to retrieve a row from database
25+ cursor = self ._db .execute ('select * from {} where t1 = ?' .format (self ._table ), (key ,))
26+ return dict (cursor .fetchone ()) # fetch only one in dictionary form
27+
28+ def update (self , row ): # to update a row in database
29+ self ._db .execute ('update {} set i1 = ? where t1=?' .format (self ._table ), (row ['i1' ], row ['t1' ]))
30+ self ._db .commit ()
31+
32+ def delete (self , key ):
33+ self ._db .execute ('delete from {} where t1 = ?' .format (self ._table ), (key ,))
34+
35+ def display_rows (self ):
36+ cursor = self ._db .execute ('select * from {} order by t1' .format (self ._table ))
37+ for row in cursor :
38+ print ('{}:{}' .format (row ['t1' ], row ['i1' ]))
39+
40+ def __iter__ (self ):
41+ cursor = self ._db .execute ('select * from {} order by t1' .format (self ._table ))
42+ for row in cursor :
43+ yield dict (row )
44+
45+ @ property # filename getter decorator
46+ def filename (self ): return self ._filename
47+
48+ @filename .setter # filename setter decorator
49+ def filename (self , filename ):
50+ self ._filename = filename
51+ self ._db = sqlite3 .connect (self ._filename )
52+ self ._db .row_factory = sqlite3 .Row
53+
54+ @filename .deleter # filename deleter decorator
55+ def filname (self ): self .close () # close the database
56+
57+ @property #decorator to get tablename
58+ def table (self ): return self ._table
59+ @table .setter # decorator to set tablename
60+ def table (self , t ): self ._table = t
61+ @table .deleter # decorator to delete tablename
62+ def table (self ): self ._table = 'test'
63+
64+ def close (self ):
65+ self ._db .close () # close the database
66+ del self ._filename
67+
68+ def main ():
69+ db = database (filename = 'test.db' , table = 'test' )
70+
71+ print ('Create table test' )
72+ db .sql_do ('drop table if exists test' )
73+ db .sql_do ('create table test ( t1 text, i1 int )' )
74+
75+ print ('Create rows' )
76+ db .insert (dict (t1 = 'one' , i1 = 1 ))
77+ db .insert (dict (t1 = 'two' , i1 = 2 ))
78+ db .insert (dict (t1 = 'three' , i1 = 3 ))
79+ db .insert (dict (t1 = 'four' , i1 = 4 ))
80+ for row in db : print (row )
81+
82+ print ('Retrieve rows' )
83+ print (db .retrieve ('one' ), db .retrieve ('two' ))
84+
85+ print ('Update rows' )
86+ db .update (dict (t1 = 'one' , i1 = 101 ))
87+ db .update (dict (t1 = 'three' , i1 = 103 ))
88+ for row in db : print (row )
89+
90+ print ('Delete rows' )
91+ db .delete ('one' )
92+ db .delete ('three' )
93+ for row in db : print (row )
94+
95+ print ('Done!!' )
96+ if __name__ == '__main__' :main ()
0 commit comments