### 1.4.16.1 Implementing the Classes

Virtually all the functionality of the API has been implemented as base classes from which module implementers simply need to derive their own classes, over-riding methods to suit their particular database syntax as necessary.

In particular this requires writing custom converter methods to ensure that the database returns the correct values, overriding the `makeConnection()` method to convert `connect()` method parameters to the appropriate form for the driver, and overriding the cursor abstraction methods so that they build the correct SQL strings from the parameters.

`web.database`implementation comes with basic implementations for PySQLite, `web.database` and a partial implementation for MySQLdb (transaction support isn't implemented). These can all be used as examples.

If a particular database engine does not natively support part of the API it should be emulated in the derived classes even if it is difficult or slow to do so.