2012-01-11 250 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