Perhaps my statement is wrong.
DAL works fine with keyed tables.
When I started to make web2py interface to a legacy database I tried
keyed tables because many tables in the db have composite primary
keys. I kept bumping in documentation examples that describe how to do
things with normal id tables which will not work with keyed ones.
Don't remember exactly what were the problems. Its been a while since
I realized I don't have to use all fields that are defined as a
primary key in a legacy db SQL schema. If there is a unique int field
I can
db.define_table('mytable', Field('unique_int_column', 'id', migrate=False)
and have all the web2py magic.
If there is no unique int field it can be added to a table with SQL
and this will not affect legacy software that uses the db.