Simple queries could be generated from lists of filters, also simple
queries require fewer ()'s:

db(*programmatic_filters).select()
db(programmatic_filters).select()
db(db.person.last_name=='Obama',db.person.first_name=='Barack').select
()

vs

db((db.person.last_name=='Obama')&
(db.person.first_name=='Barack')).select()

and

db(db.person.last_name=='Obama')(db.person.first_name=='Barack').select
()

You have to iteratively build the query from the list, it would be
easier to just pass in the list with or without a * (splat).

The real benefit is that drivers that do not allow "|" (GAE, MEMDB)
could use trivial query parsers, which would make those drivers simple
to write and maintain.



>
> > person = db.person(party='Republican')
> > -> returns a person with default= values populated and **attrs set
> > person.first_name = 'John'
> > response.render(person=person)
> > -> the record can be printed on a page without inserting it in db
> > person.insert()
> > -> actually inserts the record, returns 1 for success, 0 for failure,
> > updates person attrs
>
> Not convinced about this one.

The benefit here is that you have easy access to all the default
values without doing an insert, this become especially useful if
db.Field(default=lamda:foo(123)) becomes possible.

>
> > person = db.person[person.id]
> > -> shortcut syntax for db(db.person.id==person.id).select()[0]
>
> love this one


>
> > db.person[person.id] = db.person(age=lambda attrs: attrs.age+=1)
> > -> update a record without having to fetch it first
>
> this depends on the one above I am not convinced about. One could do
> db.person[person.id].update_record(age=...)

db.person[person.id].update_record(age=...)
-> would require 2 db requests (select,update)

 db.person[person.id] = db.person(age=...)
-> would require 1 db request (update)

Since __setitem__(self,key,value)  maps to self[key] = value,
if implemented properly in the driver,
this eliminates the redundant db request.

>
> > del db.person[person.id]
> > -> delete a record without having to fetch it first
>
> love this one too

DictMixin could be used to implement a lot of functionality in the
driver:
http://svn.python.org/view/python/trunk/Lib/UserDict.py?view=markup

Robin
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" 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