Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ce579c5

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /