...you really want to understand the stateless nature of the web, and
the flow thru web2py in response to a request:

someone requests a page from your web2py (e.g. types a URL);

web2py parses the request (gluon) and decides which application and
controller this is for

web2py sets up the environment for the call (i.e. spawns a thread, and
runs all the application's model files - which is how that thread gets
a db connection, and knows what tables exist)

web2py then calls the appropriate controller (with this env setup)
with any parameters (as the request URL might indicate)

NOW -  that note about multiple def'ns of a connection (or table)
should make more sense.

- Yarko


On 10/31/09, Thadeus Burgess <[email protected]> wrote:
> Ok, models are executed in alphabetical order. And you only need to define
> the DAL once, if you do it again, you lose all tables defined.
>
>
> so this is the order they would get executed in.
>
> comment.py <<<
>
> db.py <<<
>
> post.py <<<
>
> -Thadeus
>
>
>
>
> On Sat, Oct 31, 2009 at 6:56 PM, Mengu <[email protected]> wrote:
>
>>
>> Thadeus, thanks for the reply. By the way, these are not controllers,
>> these are models.
>>
>> Mengu
>>
>> On Nov 1, 1:53 am, Thadeus Burgess <[email protected]> wrote:
>> > 2) YES, They need to be in db.py, or another model file, but preferably
>> > db.py.
>> >
>> > 1) will not work. controllers are not python modules, they cannot be
>> > imported. They are ment to be run in a pre-setup environment by web2py.
>> >
>> > The DAL does not know about any tables in the database, unless they are
>> > specified with "define_table"... Even for tables that exist.
>> >
>> > So you cannot split your db table statements up into separate
>> controllers,
>> > that get called at separate times.
>> >
>> > -Thadeus
>> >
>> > On Sat, Oct 31, 2009 at 4:07 PM, Mengu <[email protected]> wrote:
>> >
>> > > Hi everyone.
>> >
>> > > I have db = DAL("sqlite://blog.db") in my db.py. I can define my
>> > > tables in my models with having that statement in the model however I
>> > > cannot create relationships.
>> >
>> > > For example, this is post.py:
>> > > db = DAL("sqlite://blog.db")
>> > > db.define_table('post',
>> > >    Field('title', 'string'),
>> > >    Field('body', 'text')
>> > > )
>> >
>> > > and this is comment.py:
>> > > db = DAL("sqlite://blog.db")
>> > > db.define_table("comment",
>> > >    Field('post_id', db.post),
>> > >    Field('author', 'string'),
>> > >    Field('comment', 'text')
>> > > )
>> >
>> > > I get the following error:
>> >
>> > > Traceback (most recent call last):
>> > >  File "/home/mengu/projects/web2py/gluon/restricted.py", line 184, in
>> > > restricted
>> > >    exec ccode in environment
>> > >  File "/home/mengu/projects/web2py/applications/blog/models/
>> > > comment.py", line 5, in <module>
>> > >    Field('post_id', db.post),
>> > >  File "/home/mengu/projects/web2py/gluon/sql.py", line 1148, in
>> > > __getattr__
>> > >    return dict.__getitem__(self,key)
>> > > KeyError: 'post'
>> >
>> > > I also should note that this works fine if post_id is not db.post but
>> > > an integer or another field.
>> >
>> > > So my questions are:
>> >
>> > > 1) Should I import db.post for this to work and how?
>> >
>> > > 2) Must table definitions always be made on the db.py file?
>> >
>> > > Thanks.
>> >
>> > > Mengu
>> >
>>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to