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 [email protected].
For more options, visit https://groups.google.com/d/optout.