If that's the issue, you could imagine an alternative version of Set that doesn't require the db as an argument:
Set(db.mytable.id > 0).select()
That guarantees you never have to type more than three extra letters (I suppose we could change it to just S() or Q() to get it down to one letter), but you can still pass additional parameters. And this is just a personal preference, but I also think it looks better and is more clear if you have something like:
SomeClass(...).some_method()
or:
some_object.some_method()
rather than:
(some python expression).some_method()
Particularly when the Python expression wrapped in the parentheses looks like a boolean (which can lead to confusion).
Also, keep in mind that we can now do:
db('some arbitrary SQL expression').select(...)
In that case, (a) the "db" is not actually redundant, and (b) you could not do
('some arbitrary SQL expression').select().
To accommodate that case, we could have something like:
Set('SQL expression', db=db).select(...)
where specifying the db would be optional, used only when it could not be discerned from the query.
In short, the problem with the current proposal is that we lose both functionality and consistency for seemingly little gain. If we want to avoid redundancy of specifying "db" or having to type long names of DAL objects, a better approach might be to adopt the direct use of the Set class (or create a new class called S or Q).
Anthony