2012-01-11 211 views
18

我对数据库,执行SQL查询等方面比较陌生。此刻,我专门为我的数据库使用了MS SQL Server(这是我们在工作中使用的),但希望对我的问题的回答可能比只针对特定数据库更普遍。pymssql与pyodbc与adodbapi相比...

我使用数据库接口应用程序本身(本例中为SQL Server Management Studio)做了很多工作,但我也通过python脚本做了一些工作,其中一些作为cron作业运行,其中一些作业是用户可以向数据库提交查询的网站。

我一直在使用pymssql模块来查询&从python写入数据库。但是我遇到了一些恼人的问题。 (看起来pymssql不能使用临时表,并且我也遇到了“自动提交”的问题,但这可能是我自己的错。)

因此,我对这种情况一无所知,我只是喜欢什么我应该走的方向。至于我可以告诉大家,我既可以:

  • 使用pymssql,这直接交谈MS SQL服务器
  • 使用pyodbc,这就需要安装freetds的第一&了unixODBC,并且将它们设置
  • 使用adodbapi模块,我不确定这里需要什么需求。
  • 另一种方法??

事情是,我没有充分得到什么ODBC的。这看起来像某种“认证中介”,有点像中间人,以确保用户是他/她所说的。而我对ADO的了解甚少。

虽然pymssql似乎是最简单的方法,但它似乎也是人们不那么重视的一种,并且最终会被弃用。我宁愿学习“正确”的方式,因为我几乎刚刚开始使用这些东西。

因此,我正在寻找一些关于如何让python与MS SQL Server交谈以及与一般数据库交谈的最佳方式的见解。我会将“最好”定义为最适合那些会做适度复杂的事情的人。 (虽然我刚刚开始,但我最终还是需要加强一些。)

谢谢! 迈克

回答

16

pyodbc(推荐)

我已经使用这个模块在几个月前开始,没有怨言为止。开发社区似乎比pymssql更加活跃。到目前为止我没有安装问题(32位Win XP和64位Server 2008 R2)。您将拥有额外的优势,您不仅限于MS SQL Server。

您可能会发现:http://www.lfd.uci.edu/~gohlke/pythonlibs/有帮助,如果你在Windows上安装。

pymssql

我和1.x版本的工作约5年。对于大型对象的大小限制,我遇到了一些小问题。我在多线程时遇到了大问题(如果关闭,我不得不关闭)。 1.x基于不推荐的MS库。但是,最近的版本是2.x,不再使用这些已弃用的库。相反,它使用FreeTDS(如pyodbc)。听起来不错,但我还没有尝试过。

adodbapi

我试着开关了pymssql和一年前与adodbapi取而代之约而其中一些工作得很好用pymssql查询的失败,没有明显的理由。我很快又放弃了adodbapi。

+3

正如2016年12月宣布的,pyodbc现在[由Microsoft正式支持](https://blogs.technet.microsoft.com/dataplatforminsider/2016/12/09/sql-server -python-什么新/)。 – 2017-01-01 22:17:57

9

从我的经验来看,PYODBC目前有点问题。首先,它似乎没有正确或可靠地管理Unicode字符串。其次,这个API有点过时了,并且特定的和更少的Python DB-API(PEP-249)兼容。

我正在将项目代码迁移到PYMSSQL中,到目前为止,在我的测试期间,它涵盖了上述两个问题的基础。我不知道这个API有任何弃用,因为它似乎有点频繁更新(主要版本在2013年10月),文档或多或少是最新的,并且是活跃的。

这些只是我目前在PYODBC和PYMSSQL上的发现和进展。所有课程都会随时更改:)

+2

是的,pyodbc经历了一些粗糙的补丁,但它最近收到了一些TLC,现在[由Microsoft正式支持](https://blogs.technet.microsoft.com/dataplatforminsider/2016/12/09/ SQL服务器的Python-什么新/)。 – 2017-01-01 22:16:56

+1

今年早些时候(2017年),有人建议终止pymssql,参见[建议终止pymssql以支持pyodbc](https://github.com/pymssql/pymssql/issues/477)和[pymssql vs pyodbc]( https://groups.google.com/forum/#!topic/pymssql/CLXHtLKBWig)。他们决定继续,但最后一个链接显示,pymssql背后的社区正在努力寻找维护者。我认为现在pyodbc似乎是一个更好的选择(也许pymssql依赖于您的需求仍然更好)。 – 2017-08-09 18:15:45