I'm at my first attempt at creating something for the PyS60 and I needed a simple sql wrapper class...
I'm an experienced programmer, but has never programmed in python for s60 and it's been a while since I've used Python... So I hope this will help somebody, not annoy ;-)
import e32db
class db:
def __init__(self, dbpath):
self.db = e32db.Dbms()
self.dbv = e32db.Db_view()
self.reset_counters()
try:
self.db.open(unicode(dbpath))
except:
self.db.create(unicode(dbpath))
self.db.open(unicode(dbpath))
def reset_counters(self):
self.affected_rows = 0
self.num_rows = 0
self.__internal_counter = 0
def query(self, sql):
self.reset_counters()
if sql.lower().startswith('select'):
self.dbv.prepare(self.db, unicode(sql))
self.dbv.first_line()
self.num_rows = self.dbv.count_line()
else:
self.affected_rows = self.db.execute(unicode(sql))
def next(self):
row = {'id': 0}
if self.num_rows < 1:
self.reset_counters()
raise StopIteration
elif self.__internal_counter < self.num_rows:
self.dbv.get_line()
for i in range(self.dbv.col_count()):
row[i] = self.dbv.col(i+1)
self.dbv.next_line()
self.__internal_counter += 1
return row
else:
self.reset_counters()
raise StopIteration
def __iter__(self):
return self
Now to create and fill db, create a file in the same dir as the db.py with this content:
__exec_path = "E:\\Python\\"
dbname = "test"
import sys
sys.path.append(__exec_path)
from db import db
mydb = db(__exec_path+dbname+'.db')
mydb.query("create table testing (id counter, name varchar)")
mydb.query("insert into testing (name) values ('test 1')")
mydb.query("insert into testing (name) values ('test 2')")
Now go ahead and have fun:
__exec_path = "E:\\Python\\"
dbname = "test"
import sys
sys.path.append(__exec_path)
from db import db
mydb = db(__exec_path+dbname+'.db')
mydb.query("select * from testing")
for row in mydb:
print "-> ",row[0]," ",row[1]," <-"
Have fun!
Dan