You cannot do this. The connection has to be stablished in the models and 
the tables have to be defined in the models as well.

The issue is that a db connection only lives within a thread. Since web2py 
is multithreaded at every request you may get a different thread.

 If is ok to do

import ocart2
web=ocart2.web()
rows=web(web.category.category_id>0).select()
log.info((web.tables, rows))

MODULE:
from gluon import *
from config import webstring
def web():
   db = DAL(webstring, pool_size=10, migrate=False, migrate_enabled=False)
   db.define_table('category',
     Field('category_id', 'id', notnull=True, writable=False),
     Field('parent_id', 'integer', default=0, notnull=True, writable=False),
     Field('status', 'integer', default=1),
     Field('top', 'integer', notnull=True, writable=False))
   return db

You may also be able to do this:

MODEL:

import ocart2
web=ocart2.web
web.reconnect() # <<<
rows=web(web.category.category_id>0).select()
log.info((web.tables, rows))

MODULE:
from gluon import *
from config import webstring
web=DAL(webstring, pool_size=10, migrate=False, migrate_enabled=False)
web.define_table('category',
    Field('category_id', 'id', notnull=True, writable=False),
    Field('parent_id', 'integer', default=0, notnull=True, writable=False),
    Field('status', 'integer', default=1),
    Field('top', 'integer', notnull=True, writable=False))

Yet the reconnect() method is experimental and I am not sure it does not 
cause a memory leak. Yet you can help me test it.

On Monday, 10 December 2012 04:13:43 UTC-6, simon wrote:
>
> In my model file I am importing a database definition from a module file.
> This works correctly the first time after the server is started showing 
> the tablename and 11 rows in the table.
> However for the second and subsequent requests it shows a rows object but 
> 0 rows in the table.
> It works fine if I put the model definition code inline rather than 
> importing.
>
> [EDIT: I am fairly sure this used to work. Has something changed? Is there 
> a way to get this to work?]
>
> MODEL:
>
> import ocart2
> web=ocart2.web
> rows=web(web.category.category_id>0).select()
> log.info((web.tables, rows))
>
> MODULE:
> from gluon import *
> from config import webstring
> web=DAL(webstring, pool_size=10, migrate=False, migrate_enabled=False)
> web.define_table('category',
>     Field('category_id', 'id', notnull=True, writable=False),
>     Field('parent_id', 'integer', default=0, notnull=True, writable=False),
>     Field('status', 'integer', default=1),
>     Field('top', 'integer', notnull=True, writable=False))
>
>

-- 



Reply via email to