Mire muy de cerca SQLAlchemy.
Puede probar y desarrollar con SQLite.
Puede entrar en producción con MySQL, esencialmente sin hacer cambios en sus aplicaciones.
La DB-API, aunque se adhiere ampliamente, tiene suficiente flexibilidad para que (1) no esté aislado de la variación de SQL en el RDBMS subyacente y (2) todavía hay características específicas del controlador DB que son difíciles de ocultar.
Otra buena capa de ORM es el ORM que forma parte de Django . Puede (con un poco de esfuerzo) usar solo el ORM de Django sin usar el resto del marco web de Django.
Use una capa ORM (SQLAlchemy o SQLObject) en lugar de DB-API.
¿Por qué? Su modelo debe ser un modelo OO sólido, claro y bien pensado. El mapeo relacional debería ocupar el segundo lugar después del modelo de objetos. SQLAlchemy hace de este un enfoque razonable.
Una "capa de abstracción de base de datos" ocurrirá en el curso normal de los eventos. De hecho, debido a DB-API (tal como lo usa SQLAlchemy), diste dos capas de abstracción:ORM y DB-API.