Well, leaving aside for the moment, the question of whether the world really needs yet another SQL abstraction module :-), I see a couple of portability issues. Your connect() syntax is DBDs specific - not all DBDs have things called databases, hosts, ports, in the connect string and if they do, they're not necessarily named the same thing. The problem with the update() and insert() is that you have no way for user to specify bind_params when needed. This issue is dealt with by
SQL::Abstract and quite elegantly by
SQL::Preproc.
update : Oh, and you really should allow people to pass in flags to the connect() and not simply set RaiseError. And if you do set RaiseError, you should probably unset PrintError since otherwise all error messages will be duplicated (if the DBD follows the API).