我在使用Perl DBI模块方面有很好的经验,DBI模块充当多个数据库(如Oracle、Postgres等)的单个API。
我最近开始研究python,我注意到python中的每个数据库都有单独的api。
以下是我的问题:
一。python中不是只有一个db api吗?
2.如果不是,这不是python的一个缺点吗?
最佳答案
没有与Perl的以DBI为中心的生态系统等价的Python。相反:
dbapi(pep 249)定义了一个公共的低级接口,关系数据库驱动程序应该提供这个接口。
一些项目,如sqlalchemy core abstract over multiple drivers,使用公共dbapi接口。
由于模块系统的不同,python缺少合适的dbi等价物比在perl中要少一些缺点。假设您将自己限制在一个公共sql子集和dbapi中,而不是使用特定于驱动程序的扩展,那么切换到另一个驱动程序就可以像更改导入和更新连接信息一样简单:
- import somedatabase as db
+ import differentdriver as db
实际上,python的dbapi和perl的dbi都不能让您随心所欲地切换数据库。然而,Perl的DBI使编写与多个数据库一起工作的软件变得更加容易。