<p>Shylent的帖子满足了运营商对等效代码的要求。但是,它没有充分解决Python与Perl DBI等价的问题。</p>
<p>对于那些不熟悉<a href="http://search.cpan.org/perldoc?DBI" rel="noreferrer">Perl's DBI</a>的人,它为所有数据库系统提供了一个公共接口。要添加对新存储后端的支持,<a href="http://search.cpan.org/perldoc?DBI::DBD" rel="noreferrer">a database driver or DBD needs to be written</a>。<a href="http://search.cpan.org/search?query=DBD&mode=module" rel="noreferrer">Drivers exist for many different database systems</a>,甚至非数据库目标,如CSV文件和电子表格。</p>
<p>看起来<a href="http://www.python.org/dev/peps/pep-0249/" rel="noreferrer">Python DB-API</a>是最接近Perl DBI的东西。然而,它是一个规范,而不是一个实现。任何数据库驱动程序在多大程度上符合作者的规范。</p>
<p>当然,数据库系统在它们支持的SQL命令和语法方面有所不同。数据库在它们提供的功能上有很大的不同。任何试图标准化数据库交互的系统都会遇到可移植性问题,因为所有这些不同的系统都提供不同的功能集。</p>
<p>我在Perl DBI方面的经验非常积极。编写与许多DBD驱动程序一起工作的可移植代码相当容易。通过简单地更改数据库连接字符串,我在一个应用程序中成功地使用了4个不同的数据库驱动程序(Postgres、MySQL、CSV文件驱动程序和SQLite)。对于需要访问数据库更多“不兼容”功能的更复杂的应用程序,有许多<a href="http://search.cpan.org/perldoc?Rose::DB" rel="noreferrer">abstraction libraries</a>扩展了DBI接口并进一步简化了可移植性。</p>
<p>我没有足够的Python经验来说明PEP249在现实世界中的表现。我的希望是数据库驱动程序开发人员接近规范,而且可移植性很容易获得。也许对Python有更深入了解的人能够在这个主题上进行扩展。有一些<a href="http://wiki.python.org/moin/DatabaseProgramming/" rel="noreferrer">information on Python database access at the Python wiki</a>。</p>