> > 1. When you do a select that includes a reference field, how does it > fetch, say, the name column, when only the id column is in the table you > are doing a select on? >
Unless you do a join, it does not fetch the "name" column (presumably you mean the "name" column of the referenced table) at the time of the initial select. However, if you access the "name" attribute of one of the returned Row objects, it will do a query to fetch the "name" field for that particular record. If you check the type of the reference field of the Row object, you'll see that it is a DAL Reference object -- this holds the value of the referenced record id but also knows how to fetch the associated record from the referenced table. This is called a recursive select <http://web2py.com/books/default/chapter/29/6#Recursive-selects>. Note, because recursive selects involve a separate query for each record, if you have to loop over many records, it is more efficient to do a single query with a join instead. > 3. My list:reference fields hold a series of integer values but they do so > in a column of type 'text' . They are strings of integers separated with > '|'. If I were going to use SQL, rather than DAL methods to update a > list:reference field of this kind, would inserting a string like this - > '|100|300|450|' - work the same as a field updated by the DAL with a list? > Or is the DAL doing something else behind the scenes when you update the > field that would be excluded from a simple SQL update. > I don't think the DAL is doing anything special other than creating a string as you describe above, so you should be able to make your own inserts using SQL if you like. Anthony --

