pymssql与pyodbc与adodbapi的比较

27 投票
2 回答
40017 浏览
提问于 2025-04-17 09:58

我对数据库和SQL查询还比较陌生。目前我主要使用MS SQL Server作为我的数据库(因为这是我工作中使用的),但希望能得到一些更普遍的建议,而不仅仅是针对这个特定的数据库。

我大部分工作都是通过数据库界面应用程序来完成的(在这个例子中是SQL Server Management Studio),但我也会通过Python脚本来做一些工作,其中一些脚本作为定时任务运行,还有一些是网站,让用户可以提交查询到数据库。

我一直在使用pymssql模块来从Python中查询和写入数据库。但我遇到了一些烦人的问题。(似乎pymssql不能使用临时表,而且我在“自动提交”方面也遇到了一些麻烦,这可能是我自己的问题。)

所以我对这些还不太了解,只想知道我应该朝哪个方向走。根据我的理解,我可以选择:

  • 使用pymssql,它可以直接与MS SQL服务器通信
  • 使用pyodbc,这需要先安装FreeTDS和unixODBC,并进行设置
  • 使用adodbapi模块,但我不太清楚这里需要什么要求。
  • 还有其他方法吗??

问题是,我不太明白ODBC到底是干什么的。它似乎是一种“认证中介”,就像一个中间人,确保用户的身份。而我对ADO的理解更少。

虽然pymssql看起来是最简单的选择,但似乎大家对它的评价不高,而且它可能会被淘汰。我希望能学到“正确”的方法,因为我刚开始接触这些东西。

所以我在寻找一些有经验的意见,关于如何让Python与MS SQL Server沟通,以及如何与数据库沟通。我定义的“最好”是适合那些会进行中等复杂操作的人。(虽然我刚开始,但我最终会需要在这方面深入学习。)

谢谢!

迈克

2 个回答

10

根据我的经验,现在使用PYODBC有点问题。首先,它似乎不能很好地处理unicode字符串,稳定性也不够。其次,它的接口有点过时,跟Python的数据库标准(PEP-249)不太符合。

我现在正在把项目代码迁移到PYMSSQL,经过我的测试,这个库在上面提到的两个问题上表现得不错。我不知道这个API有没有被弃用,因为它似乎更新得还挺频繁(上一个大版本是在2013年10月),文档也基本上是最新的,而且社区也很活跃。

这些只是我目前对PYODBC和PYMSSQL的发现和进展,当然,情况可能会有所变化 :)

23

pyodbc(推荐使用)

我几个月前开始用这个模块,到现在为止没有遇到任何问题。这个开发社区似乎比pymssql更活跃。我在安装时没有遇到任何麻烦(在32位的Win XP和64位的Server 2008 R2上)。而且你还可以享受到一个额外的好处,就是不局限于使用微软的SQL服务器。

如果你在Windows上安装,可能会觉得这个链接:http://www.lfd.uci.edu/~gohlke/pythonlibs/很有帮助。

pymssql

我用了1.x版本大约2年半。在处理大对象时,我遇到了一些小问题。还有在多线程时遇到了很大的麻烦(甚至不得不关闭多线程功能)。1.x版本是基于一些已经不再推荐使用的微软库。不过,最近的2.x版本不再使用这些过时的库,而是改用了FreeTDS(和pyodbc一样)。听起来不错,但我还没试过。

adodbapi

大约一年前,我尝试把pymssql换成adodbapi,但发现一些在pymssql上运行良好的查询在adodbapi上却莫名其妙地失败了。所以我很快就放弃了adodbapi。

撰写回答