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