It seems that the "db" object given by the DAL wraps up not only the 
database definition, but also a "live" connection to the database.  This 
means that if the db object is stashed somewhere, it can go "stale" and 
attempts to use it later will lead to strange errors.  Is that so?

What I'm trying to do is to pre-build a query constraint like 
"db.MyTable.myfield < 2", within a module.  Later in controller code I may 
retrieve these stored constraints and string them together using &.  But 
right now it seems I have to build the constraints anew within a function, 
because if I do something like "stored_query = db.MyTable.myfield < 2" at 
the top level of module code, the db object goes stale.  Later I get errors 
such as "name conflict in table list", apparently because it doesn't 
realize the stored "db.MyTable" is the same as "real_db.MyTable" (where 
"real_db" is the new live db object for the current request).

It is not a huge deal to regenerate the constraints by calling a function, 
but it would be nice if they could just be stored as static objects.  Is 
there any way to use the DAL's nice query-building syntax without a live DB 
connection, and then later used one or more stored query constraints when 
querying a live db connection?  Something like:

# in somemodule.py
db = ? # get non-live DB object to build query
query1 = db.MyTable.myfield < 2
query2 = db.MyTable.otherfield == "blah"

# in a controller
import somemodule

def controller_function():
    # now db has a live connection
    db(somemodule.query1 & somemodule.query2).select()

Is such a thing possible?

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to