2012-02-20 80 views
1

它看起来像MySQLdb的,psycopg2和cx_Oracle的工厂有coneccting到数据库的漂亮呈三角接口。因此,它听起来很合理,以创建一个工厂,一个人可以使用这样的:蟒蛇 - 寻找DB驱动程序

conn = DBDriverFactory("MySQL", connectionDetails) 

但首先,我要确保:

  1. 我绝不错过一些更好的解决方案,我的想法是不是真的笨。
  2. 没有这样的任何众所周知的工作溶液从重塑车轮以防止。

我知道django和炼金术应该做这些事情,但我正在寻找一些非常轻巧和简单(但高效和优雅)的东西。

回答

0

这并不存在,作为一个“轻量和简单的”解决方案的原因是,大多数SQL数据库引擎使用不同的SQL语法,不同的DB-API参数,有时微妙的不同语义,更改数据库是没有改变那么简单要使用的DB-API模块。真正的抽象需要解析SQL并生成适合于正在使用的数据库的新SQL。

我不知道任何试图执行此操作的软件包,因为常见的方法(也更容易)是通过更易于分析的形式生成引擎特定的SQL(例如类ORM的SQLAlchemy和Django的ORM你创建。)

+0

我对通用接口的印象是基于这样的事实,即所有提到的DB后端暴露光标对象,与执行,fetchone和使用fetchall方法。对于插入,选择,更新等简单操作,只要删除此语句就足够了,并且SQL方言中的差异应该可以忽略不计。 – mnowotka 2012-02-20 10:37:27

+0

的DB-API指定数据库模块应公开的功能,类和方法,是的。您仍然留下不同的参数方式,以及实际SQL语法中的许多差异。仅仅是paramstyle问题意味着仅仅两个不同数据库引擎的SQL语法的“共同子集”就会非常有限。 – 2012-02-20 11:52:20