FYI, As of SQLite 3.3.1, some of the threading restrictions on  
database connection sharing have been relaxed. I have not yet tried  
it with SQLObject, but it looks like threaded connection pooling  
might now work. See:

http://www.sqlite.org/cvstrac/wiki?p=MultiThreading

-- David

On Jun 23, 2006, at 12:34 AM, Alex Le Dain wrote:

> Hey List,
>
> I understand that SQLite is not thread safe, but it still serves a
> useful function as a single file database. I normally use cherrypy  
> with
> SQLObject and MySQL, but for other reasons wanted to use SQLite as
> storage. I was lead to examine the information on cherrypy and  
> databases:
>      http://www.cherrypy.org/wiki/SQLObjectThreadPerConnection
> and
>      http://www.cherrypy.org/wiki/CherryPyDatabase
>
> However, there is a disparity between the two recipes. In the  
> SQLObject
> method this is done (modified for cherrypy 2.1):
>
> import cherrpy
> def connect(threadIndex):
>      # Create a connection and store it in the current thread
>      cherrypy.threadData.db = SQLiteConnection(blah blah)
> # Tell CherryPy to call "connect" for each thread, when it starts up
> cherrypy.server.onStartThreadList = [connect]
>
>
>
> but in the SQLite method this is done:
>
> conn = dbconnection.ConnectionHub()
> class Test(SQLObject):
>      """ Basic table object that has one field (name) """
>      _connection = conn
>      name = StringCol()
> def connect(threadIndex):
>      """ Function to create a connection at the start of the thread  
> """
>      conn.threadConnection = SQLiteConnection('test.db')
> cherrypy.server.onStartThreadList = [connect]
>
> I modified this to be:
>
> hub = dbconnection.ConnectionHub()
> def connect (threadIndex) :
>      """ Function to create a connection at the start of the  
> thread. """
>      hub.threadConnection = connectionForURI('sqlite:///c|db/ 
> books.db')
>      cherrypy.threadData.db = hub
> cherrypy.server.onStartThreadList = [connect]
>
> and when accessing the connection in cherrypy handler method:
>
>      def index (self):
>          # Retrieve the thread connection.
>          c = cherrypy.threadData.db.threadConnection
>          namespace = {'tests' : Test.select(connection = c)}
>          return super(cherryBooks, self).Page(PAGE_INDEX, namespace)
>
> Basically I could never get it to work if I set the threadPool setting
> on cherrypy to to other than 1 (it would complain about the thread not
> being the same thread that created the connection). So that's fine,
> single threaded is ok, but the recipes imply that using SQLObject's
> ConnectionHub 'fixes' the threading problem, but it doesn't seem to.
>
> Can someone confirm that SQLObject can only be used (with SQLite)  
> using
> a single thread? Does the connection hub fix the problem and there is
> some problem with the code above?
>
> I guess another idea would be to open the connection within each
> handler. Is that perhaps a better (but slower) method, and more
> problematic with mutliple access to the database.
>
> cheers, Alex.
>
> -- 
>
>
>
> Using Tomcat but need to do more? Need to support web services,  
> security?
> Get stuff done quickly with pre-integrated technology to make your  
> job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache  
> Geronimo
> http://sel.as-us.falkag.net/sel? 
> cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> sqlobject-discuss mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss

---
David Creemer
http://www.zachary.com




Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
sqlobject-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss

Reply via email to