title: What are the viable database abstraction layers for Python
body: <p>I'm starting to get involved in an open source project <a href="http://www.gramps-project.org/wiki/index.php?title=Main_Page" rel="noreferrer">Gramps</a> which is exploring switching their backend from BSDDB to a relational database. Either SQLite or MySQL we haven't fully decided and may even try to do both in some limited capacity. I'm a professional developer but I'm new to python so I'm not that familiar with the current selection of tools/libraries. I've been tasked with researching DB Abstraction Layers. <a href="http://www.gramps-project.org/wiki/index.php?title=GEPS_010:_SQL_Backend" rel="noreferrer">There is currently a wiki discussion going on to compare them.</a> An object relational mapper might be nice but isn't absolutely necessary. though I know that is usually synonymous with a DB Abstraction Layer. If an ORM is included ad hock queries have to be available without to much wrestling.</p>
  
  <p>Right now the list includes:</p>
  
  <p><a href="http://code.google.com/p/couchdb-python/" rel="noreferrer">CouchDB</a>
  I haven't yet looked into this.</p>
  
  <p><a href="http://wiki.python.org/moin/DatabaseProgramming/" rel="noreferrer">DB-API</a>
  this seems to be a standard python api and each db creates their own module that uses it. Even BSDDB seems to have one written but I haven't fully explored it. are the modules interchangeable?</p>
  
  <p><a href="http://www.sqlalchemy.org/" rel="noreferrer">SQLAlchemy</a>
  This seems to be the most popular right now? but I have very limited exposure to the python world.</p>
  
  <p><a href="http://www.sqlobject.org/" rel="noreferrer">SQLObject</a> 
  I haven't yet looked into this.</p>
  
  <p>So what are peoples views and suggestions on database abstraction layers for python?</p>