"PYTHON DAO"의 두 판 사이의 차이
DB CAFE
212번째 줄: | 212번째 줄: | ||
db.close() | db.close() | ||
</SOURCE> | </SOURCE> | ||
+ | [[category:python]] |
2020년 2월 29일 (토) 18:26 기준 최신판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
http://www.mikusa.com/pysimpledb/
tar zxf pysimple-2.1.tar.gz cd pysimpledb-2.1 python setup.py install
from pysimpledb.sql import AbstractDao
from pysimpledb.mappers import *
class Tea:
"""Simple data object, no parameters are needed"""
def __init__(self, id = None, name = None, cost = 0.0):
self.id = id
self.name = name
self.cost = cost
self.mod = datetime.now()
def __str__(self):
return ("Tea : [id -> %s, name -> %s, cost -> %s, mod -> %s]" %
(self.id, self.name, self.cost, self.mod))
def __repr__(self):
return str(self)
class TeaDao(AbstractDao):
"""
Data access object for Tea.
This class will contain the functions for accessing our database.
"""
def __init__(self, db):
"""
Define queries and database connection then passes them to super class.
First define all of your queries in a dictionary. The key is the
name of the dynamic function that will be available on the Dao object.
The value is another dictionary which defines the query.
For details on the different options see the library documentation.
The following example attempts to define as many of the different
options as possible.
Finally when all of your queries have been defined, simply pass the
dictionary of queries and the database connection to the super class.
"""
queries = {
'get': {
'sql': 'SELECT * FROM tea WHERE id = :id',
'rowMapper': ObjectRowMapper(Tea),
'execType': 'queryForObject'
},
'getAll': {
'sql': 'SELECT * FROM tea',
'rowMapper': ObjectRowMapper(Tea)
},
'getAllAsMap': {
'sql': 'SELECT * FROM tea',
'rowMapper': ObjectRowMapper(Tea),
'execType': 'queryForMap',
'defaultKeyParam': 'id'
},
'getTeaByName': {
'sql': 'SELECT * FROM tea WHERE name = :name',
'rowMapper': ObjectRowMapper(Tea)
},
'count': {
'sql': 'SELECT COUNT(*) FROM tea',
'rowMapper': SingleTypeRowMapper(int)
},
'sum': {
'sql': 'SELECT SUM(cost) FROM tea',
'rowMapper': SingleTypeRowMapper(float)
},
'avg': {
'sql': 'SELECT AVG(cost) FROM tea',
'rowMapper': SingleTypeRowMapper(float)
},
'insert': {
'sql': 'INSERT INTO tea (name, cost, mod) VALUES (:name, :cost, :mod)',
'paramClass': Tea,
'insertId': 'id'
},
'batch': {
'sql': 'INSERT INTO tea (name, cost, mod) VALUES (:name, :cost, :mod)',
'paramClass': Tea,
'execType': 'batch'
},
'deleteAll': {
'sql': 'DELETE FROM tea'
},
'update': {
'sql': 'UPDATE tea SET name = :name, cost = :cost, mod = :mod WHERE id = :id',
'paramClass': Tea
},
'drop': {
'sql': 'DROP TABLE tea'
},
'create': {
'sql': (
'CREATE TABLE IF NOT EXISTS tea ('
'id integer primary key autoincrement, '
'name text, '
'cost real, '
'mod date default current_date '
');')
}
}
AbstractDao.__init__(self, db, queries)
if __name__ == '__main__':
import sqlite3
from datetime import datetime
try:
# Connect to my database
db = sqlite3.connect(database='test.db')
# Build basic objects
t1 = Tea(name='Earl Grey', cost=1.25)
t2 = Tea(name='Lady Grey', cost=1.25)
t3 = Tea(name='English Breakfast Tea', cost=1.35)
t4 = Tea(name='Green Tea', cost=0.90)
t5 = Tea(name='Black Tea', cost=0.50)
t6 = Tea(name='White Tea', cost=2.25)
t7 = Tea(name='Lemon Lift', cost=1.00)
t8 = Tea(name='Mint Tea', cost=1.99)
t9 = Tea(name='Dutch Express', cost=2.00)
t10 = Tea(name='French Twist', cost=1.75)
print (t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)
# Create my Dao Object
dao = TeaDao(db)
# Have the Dao create the table
dao.create()
print 'Created'
print
# Insert my objects
dao.insert(t1)
print t1.id
dao.insert(t2)
print t2.id
dao.insert(t3)
print t3.id
dao.insert(t4)
print t4.id
dao.insert(t5)
print t5.id
dao.insert(t6)
print t6.id
print 'Batch inserted %d elements' % dao.batch((t7, t8, t9, t10))
print 'Ids not set automatically! (%s, %s, %s, %s)' % (t7.id, t8.id, t9.id, t10.id)
# Print list
print
for obj in dao.getAll():
print '(%s, %s, %s, %s)' % (obj.id, obj.name, obj.cost, obj.mod)
print
# Raise Prices
print
for obj in dao.getAll():
obj.cost += (obj.cost * 0.1)
obj.mod = datetime.now()
dao.update(obj)
# Reprint list
print
for obj in dao.getAll():
print '(%s, %s, %s, %s)' % (obj.id, obj.name, obj.cost, obj.mod)
print
# Print the list as a map keyed by the default id
print
for key,objs in dao.getAllAsMap().iteritems():
for obj in objs:
print 'id %s -> (%s, %s, %s, %s)' % (key, obj.id, obj.name, obj.cost, obj.mod)
print
# Print the list as a map key by the name
print
for key,objs in dao.getAllAsMap(keyParam="name").iteritems():
for obj in objs:
print 'name %s -> (%s, %s, %s, %s)' % (key, obj.id, obj.name, obj.cost, obj.mod)
print
# Execute some scalar operations
print
print 'Found %d number of teas' % dao.count()
print 'Total %0.2f price of teas' % dao.sum()
print 'Average %0.2f price of teas' % dao.avg()
print
# Delete Objects
dao.deleteAll()
print 'Deleted'
# Drop table
dao.drop()
print 'Dropped'
except sqlite3.Error,e:
print
print 'Uncaught Exception: ',str(e)
print
finally:
db.close()