Skip to content

Commit ce579c5

Browse files
committed
Add database demo with sqlite3 based on OOP
1 parent 4f9e626 commit ce579c5

File tree

3 files changed

+121
-0
lines changed

3 files changed

+121
-0
lines changed

DatabaseOOP/.project

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<projectDescription>
3+
<name>DatabaseOOP</name>
4+
<comment></comment>
5+
<projects>
6+
</projects>
7+
<buildSpec>
8+
<buildCommand>
9+
<name>org.python.pydev.PyDevBuilder</name>
10+
<arguments>
11+
</arguments>
12+
</buildCommand>
13+
</buildSpec>
14+
<natures>
15+
<nature>org.python.pydev.pythonNature</nature>
16+
</natures>
17+
</projectDescription>

DatabaseOOP/.pydevproject

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+
<?eclipse-pydev version="1.0"?><pydev_project>
3+
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
4+
<path>/${PROJECT_DIR_NAME}/src</path>
5+
</pydev_pathproperty>
6+
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 3.6</pydev_property>
7+
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
8+
</pydev_project>

DatabaseOOP/src/databaseoop.py

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
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

Comments
 (0)