【问题标题】:Python equivalent of perl's dbi/DBD::Proxy access? (Perl DBI/DBD::Proxy for Python)Python 相当于 perl 的 dbi/DBD::Proxy 访问? (Perl DBI/DBD::Python 代理)
【发布时间】:2009-05-11 07:08:27
【问题描述】:

我有一个 Perl 脚本,它通过 DBI 模块与现有数据库(数据库类型未知)交互,我想在 WinXP 上的 python 2.6 中访问它。

Perl 代码是:

use DBI;
my $DSN = "DBI:Proxy:hostname=some.dot.com;port=12345;dsn=DBI:XXXX:ZZZZZ";
my $dbh = DBI->connect($DSN);  

这可以翻译成python等价物吗?

按照 (Is there any pywin32 odbc connector documentation available?) 的示例,我整理了以下内容:

import odbc
DSN = "DBI:Proxy:hostname=some.dot.com;port=12345;dsn=DBI:XXXX:ZZZZZ"
db = odbc.odbc(DSN)

但我得到了错误:

dbi.operation-error: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified in LOGIN

更新

似乎另一个 Perl 模块 DBD::Proxy 正在为处理实际查询的 Perl DBI::ProxyServer(服务器端)实现提供实际接口。

python可以用来与基于Perl的DBI::ProxyServer接口吗?

http://metacpan.org/pod/DBD::Proxy

http://hell.org.ua/Docs/oreilly/weblinux/dbi/ch08_02.htm

【问题讨论】:

  • 相同的 Perl 代码是否在同一台 Windows 机器上运行而没有错误?
  • 好问题。我正在努力安装 DBI,这是另一个问题。
  • ActiveState 和 Strawberry Perl Windows 发行版都捆绑了 DBI。
  • 似乎我缺少 DBD::Proxy 模块,我正在努力安装它。
  • 我的 perl 版本的脚本现在可以运行了,没有问题。

标签: python perl odbc dbi


【解决方案1】:

您的 python 脚本不必是 Perl 脚本的逐行翻译。

为什么不对您要访问的数据库使用 Python DB-API 兼容模块?对于 MySQL,请使用 MySQLdb。对于 PostgreSQL,请使用 PyGreSQL

或在 Google 上搜索“YourDatabaseName + python”

【讨论】:

  • -1:“不一定是逐行翻译”应该是“不能是逐行翻译”。
  • 不知道后台数据库怎么办? (我想我可以尝试不同的模块)。 Perl DBI 模块是否神奇地从给定的 $DSN 值中找出后端数据库?
  • 一个数据库永远不能完全通用地查阅...端口、连接协议、sql语法...都略有不同。 Python DB-API 提供了一个公共接口,每个数据库的驱动程序都应实现该接口,以便基础尽可能一致。 Perl 的 DBI 是相同的……一个间接层,旨在隔离每个 DB(和 DB-driver)的库。
  • 是的,当被要求连接到以“dbi:xx:”开头的 URL 时,perl DBI 会自动加载 DBD::xx,因此在本例中为 DBD::Proxy。我猜潜在的问题是 DBD::Proxy 不是真正的数据库驱动程序,而是与 some.dot.com 上的网桥通信的连接器,其 dsn 是(希望)真正的数据库驱动程序。这很可能使用 DBD::Proxy-specific 协议。
  • 是的,看起来很难,我可能最终会使用 perl。
【解决方案2】:

sqlalchemy 很不错。

【讨论】:

  • sqlalchemy 可以与 Perl DBI::ProxyServer 接口吗?
  • 您到底为什么希望 Python DB 框架与 perl DBI 结构集成,特别是考虑到 Python 中有功能完善的数据库接口?
  • 或者我只是在最后一行添加到更新之前回答了。
猜你喜欢
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 2011-10-29
  • 2013-07-31
相关资源
最近更新 更多