python - pyodbc vs ADO 通过 COM 用于 Python 脚本
问题描述
多年来,我公司一直使用win32com模块和ADO在Python脚本中通过ODBC连接数据库。我不喜欢 ADO,因为它很古老,而且 COM 本身就很慢,而且它往往会抛出一个我从未找到过解决方法的特定异常。我们使用 ODBC 是因为我们不能假设我们的客户有任何特定的数据库系统(尽管他们中的大多数使用 PostgreSQL)。我们有一个封装 ADO 并提供对 ADO 中大部分(可能是全部)功能的访问的类。我现在可以建议完全转换到 pyodbc。在此之前,我很好奇:通过 win32com 使用 ADO 是否有优势?它比pyodbc有更多的能力吗?
解决方案
通过 win32com 使用 ADO 有什么好处?它比pyodbc有更多的能力吗?
实际上,特别是关于 ODBC,并非如此。ADODB 的优势在于能够将 OLEDB 提供程序用于具有 OLEDB 提供程序但没有 ODBC 驱动程序的数据库,但这种情况很少发生。(我能记得的唯一这样的数据库是“SQL Server Compact Edition”,很久以前就停产了。)
正如对问题的评论中提到的,pyodbc 的优点是在与数据库通信时避免额外的中间件层,即
你的 Python 应用程序 ↔ pyodbc ↔ ODBC 驱动程序管理器 ↔ ODBC 驱动程序 ↔ 数据库
对比
您的 Python 应用程序 ↔ win32com ↔ ADODB ↔ ODBC OLEDB 提供程序 ↔ ODBC 驱动程序管理器 ↔ ODBC 驱动程序 ↔ 数据库
如前所述,win32com/ADODB 是一种仅限 Windows 的技术,而 pyodbc 解决方案也可以部署在 Linux 或 Mac 上,如果这些平台有适当的 ODBC 驱动程序可用。
推荐阅读
- azure-api-management - 从 set-body 中的 if 语句访问 MatchedParameters
- mathjax - 剧透中的 Mathjax 延迟渲染代码
- sap-cloud-sdk - 为 S/4HANA On-premise 2020 预生成的类型安全客户端库不可用
- liferay - Kaleo 工作流程:多个通知 onEntry
- r - 从 R 中的循环输出创建向量
- reactjs - 如何更改反应滑动按钮中显示的“解锁”默认文本
- c - 在 C 中做 case a ... z 的便携式方法
- performance - 时间复杂度 (Big O) - 当我们有 2 个嵌套的 FOR 循环时,N 的值能否决定时间复杂度是 O(1) 还是 O(N)?
- python - 在 Word2vec 模型中获取所有单词及其相似词列表的最快方法是什么?
- javascript - 使用 javascript 选择查找范围之间的 json 对象