>
> Q: I need to manipulate database contents in separate functions but if I
> place the code to a separate module it can't connect to the database.
> How can I access the database from separate module? Should I use the same
> connection string in them as used in model files (db.py)?
>
please create module and import it.
for started, you can move your code into module and add the current for
(request, response, session, cache, db).
e.g.
*models/db.py*
# for track changes module
from gluon.custom_import import track_changes; track_changes(True)
# for use in modules
from gluon import current
current.auth = auth
current.db = db
current.mail = mail
if request.controller == 'default' and request.function == 'index' :
response.models_to_run = ['db_wizard_0_blog.py', 'menu.py']
elif request.controller == 'createindextable' and request.function ==
'index' :
response.models_to_run = ['db_wizard_0_blog']
elif request.controller == 'populate' and request.function == 'index' :
response.models_to_run = ['db_wizard_0_blog']
else:
response.models_to_run = ['.*']
*modules/module_for_default.py*
from gluon import *
def show_0(table):
current.session.forget(current.response)
row = table(current.request.args(0)) or redirect(URL('index'))
return dict(row = row)
after that please import it.
e.g.
*controllers/default.py*
import module_for_default
@cache.action(time_expire = 60, cache_model = cache.ram, session = True,
vars = True, lang = True, user_agent = False, public = True)
def index():
return module_for_default.show_0(db.blog)
ref :
http://web2py.com/books/default/chapter/29/04/the-core#Accessing-the-API-from-Python-modules
Q: Do I need to create a view for every separate controller? Or can I use
> the same view in many controllers?
>
it depend, is the view is reusable by another functions in controller or
not. if reusable, i think you can use block or function in view.
ref:
http://web2py.com/books/default/chapter/29/05/the-views#Functions-in-views
http://web2py.com/books/default/chapter/29/05/the-views#Blocks-in-views
- Use indexes
> Q: Should indexes be defined in model file after defining tables or
> somewhere else? So far I have found no difference in performance when
> defining indexes.
>
i think yes, you should create table index,
Indexes are used to quickly locate data without having to search every row
in a database table every time a database table is accessed.
taken from wikipedia :
http://en.wikipedia.org/wiki/Database_index
please don't define it on models because it always execute (except you use
response.models_to_run or module to elimate it). i usually define it on
controller and access it when needed.
e.g.
*controllers/createindextable.py*
def index():
if db._dbname == 'sqlite':
db.executesql('CREATE INDEX IF NOT EXISTS idx_blog ON blog (id, title);')
elif db._dbname == 'mysql':
db.executesql('CREATE INDEX idx_blog ON blog (id, title);')
redirect(URL('default', 'index'))
best regards,
stifan
--
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/groups/opt_out.