Olhe atentamente para SQLAlchemy.
Você pode testar e desenvolver com SQLite.
Você pode entrar em produção com o MySQL -- praticamente sem fazer alterações em seus aplicativos.
A API de banco de dados, embora amplamente adotada, tem flexibilidade suficiente para que (1) você não seja isolado da variação SQL no RDBMS subjacente e (2) ainda haja recursos específicos do driver de banco de dados que são difíceis de ocultar.
Outra boa camada ORM é o ORM que faz parte do Django . Você pode (com um pouco de esforço) usar apenas o Django ORM sem usar o restante do framework web do Django.
Use uma camada ORM (SQLAlchemy ou SQLObject) em vez de DB-API.
Por quê? Seu modelo deve ser um modelo OO sólido, claro e bem pensado. O mapeamento relacional deve vir em segundo lugar depois do modelo de objeto. SQLAlchemy torna isso uma abordagem razoável.
Uma "camada de abstração de banco de dados" acontecerá no curso normal dos eventos. De fato, por causa do DB-API (como usado pelo SQLAlchemy), você forneceu duas camadas de abstração:ORM e DB-API.