Welcome, guest | Sign In | My Account | Store | Cart
from threading import Thread
from Queue import Queue

import apsw

class SingleThreadOnly(object):
   
def __init__(self, db):
       
self.cnx = apsw.Connection(db)
       
self.cursor = self.cnx.cursor()
   
def execute(self, req, arg=None):
       
self.cursor.execute(req, arg or tuple())
   
def select(self, req, arg=None):
       
self.execute(req, arg)
       
for raw in self.cursor:
           
yield raw
   
def close(self):
       
self.cnx.close()

class MultiThreadOK(Thread):
   
def __init__(self, db):
       
super(MultiThreadOK, self).__init__()
       
self.db=db
       
self.reqs=Queue()
       
self.start()
   
def run(self):
        cnx
= apsw.Connection(self.db)
        cursor
= cnx.cursor()
       
while True:
            req
, arg, res = self.reqs.get()
           
if req=='--close--': break
            cursor
.execute(req, arg)
           
if res:
               
for rec in cursor:
                    res
.put(rec)
                res
.put('--no more--')
        cnx
.close()
   
def execute(self, req, arg=None, res=None):
       
self.reqs.put((req, arg or tuple(), res))
   
def select(self, req, arg=None):
        res
=Queue()
       
self.execute(req, arg, res)
       
while True:
            rec
=res.get()
           
if rec=='--no more--': break
           
yield rec
   
def close(self):
       
self.execute('--close--')

if __name__=='__main__':

    db
='people.db'
    multithread
=True
   
   
if multithread:
        sql
=MultiThreadOK(db)
   
else:
        sql
=SingleThreadOnly(db)

    sql
.execute("create table people(name,first)")
    sql
.execute("insert into people values('VAN ROSSUM','Guido')")
    sql
.execute("insert into people values(?,?)", ('TORVALDS','Linus'))
   
for f, n in sql.select("select first, name from people"):
       
print f, n
    sql
.close()

History

  • revision 4 (13 years ago)
  • previous revisions are not available