Python与Perl的DBI是什么等价物?我如何使用它?更具体地说,以下Perl代码的Python等价物是什么?
use DBI;
# connect to a MySQL database
my $dbh = DBI->connect("dbi:mysql:database=$database; host=localhost; port=3306", $user, $pass);
# select and read a few rows
my $sth = $dbh->prepare("SELECT id, name FROM table WHERE id <= ?;");
$sth->execute(321);
while (my @row = $sth->fetchrow_array) {
my $id = $row[0];
my $name = $row[1];
print "$id. $name\n";
}
# write to the database
$sth = $dbh->prepare("INSERT INTO table (id, name) VALUES (?, ?);");
$sth->execute(123, "foo");
Shylent的帖子满足了运营商对等效代码的要求。但是,它没有充分解决Python与Perl DBI等价的问题。
对于那些不熟悉Perl's DBI的人,它为所有数据库系统提供了一个公共接口。要添加对新存储后端的支持,a database driver or DBD needs to be written。Drivers exist for many different database systems,甚至非数据库目标,如CSV文件和电子表格。
看起来Python DB-API是最接近Perl DBI的东西。然而,它是一个规范,而不是一个实现。任何数据库驱动程序在多大程度上符合作者的规范。
当然,数据库系统在它们支持的SQL命令和语法方面有所不同。数据库在它们提供的功能上有很大的不同。任何试图标准化数据库交互的系统都会遇到可移植性问题,因为所有这些不同的系统都提供不同的功能集。
我在Perl DBI方面的经验非常积极。编写与许多DBD驱动程序一起工作的可移植代码相当容易。通过简单地更改数据库连接字符串,我在一个应用程序中成功地使用了4个不同的数据库驱动程序(Postgres、MySQL、CSV文件驱动程序和SQLite)。对于需要访问数据库更多“不兼容”功能的更复杂的应用程序,有许多abstraction libraries扩展了DBI接口并进一步简化了可移植性。
我没有足够的Python经验来说明PEP249在现实世界中的表现。我的希望是数据库驱动程序开发人员接近规范,而且可移植性很容易获得。也许对Python有更深入了解的人能够在这个主题上进行扩展。有一些information on Python database access at the Python wiki。
Python数据库API使用一个公共的convention,这在不同的数据库中几乎是相同的(但不完全相同)。您可以阅读MySQLdb文档here。
mysql还有一个功能更丰富的接口,叫做oursql。它有真正的参数化(不仅仅是美化的字符串插值)、服务器端游标、数据流等等。
相关问题 更多 >
编程相关推荐