2011-08-28 20 views
31

我只是用,而不是MySQLdb的PyMySQL解決了我的Django 1.3應用中的一些問題。我遵循這個教程如何使開關:http://web-eng-help.blogspot.com/2010/09/install-mysql-5-for-python-26-and.html什麼是PyMySQL,它與MySQLdb有什麼不同?它可以影響Django的部署嗎?

現在我想知道PyMySQL實際是什麼,以及它是如何從MySQLdb不同。

我使用它在本地主機上,然後將其上傳到一些託管。

是否細到在localhost和託管他們提供力所能及的使用PyMySQL?由於我已將base.py和introspection.py中的「MySQLdb」更改爲「PyMySQL」,因此在更改這些文件後是否需要將其上傳到服務器?或者,因爲它是Django的文件,因爲Django已經在那裏上傳了,這不重要嗎?

+1

'pymysql'是mysqldb'的'純Python端口('的MySQL-python')封裝。因此,'pymysql'可以安裝在任何系統上而不需要C編譯器。安裝'mysqldb'可能需要一個編譯器和Windows會產生錯誤('錯誤:無法找到vcvarsall.bat'),如果你沒有一個。 – skjoshi

+0

如果問題不那麼廣泛,這個問題會更有用。你在問幾件事情:兩個庫之間的區別,如何將PyMySQL部署到某種共享主機環境(你沒有告訴我們任何事情,以及我們無法幫助你的東西),以及,更廣泛地說,在Django中使用PyMySQL時需要注意哪些問題。這些是三個不同的問題,因此會更好地問。 –

+0

問題是關於是否應該使用PyMySQL,我有兩個擔心,你打電話給多個問題。 – Hafiz

回答

12

PyMySQL和MySQLdb的是Python的兩個數據庫連接器,庫,使Python程序跟一個MySQL服務器。

部署應用程序時,您通常會永遠上傳核心Django的文件。如果Django在你的部署服務器上工作正常,你絕對不需要在那裏改變任何東西。數據庫驅動程序甚至在ORM下面還有一兩步,當然,你所寫的代碼中沒有一個取決於哪一個正在使用。

9

你的第一點:

根據pymysql wiki頁:

MySQLdb, is a C extension module that has a reputation of being difficult to compile, especially if you're on a Mac. Additionally, end-users need to wait for new binaries to be compiled for each new release of Python, and MySQLdb will never run on Jython, IronPython, or PyPy (without something like cpyext or IronClad). We also maintain 100% compatibility between Python 2 and Python 3, so all advancements made on the 2.x trunk will be immediately available on Python 3.

你的第二點:

If django is working fine on your localhost, then it should be fine on your development.

+0

嗯,但我的觀點是,雖然我已經改變MySQLdb pymysql在這兩個文件告訴上述是Django的,所以它會產生問題?或者django已經在webhostings上了嗎?或者pymysql在那裏? – Hafiz

47

PyMySQL和MySQLdb的提供相同的功能 - 它們都是數據庫連接器。不同之處在於MySQLdb是C擴展,PyMySQL是純Python。

有幾個原因,試圖PyMySQL:

  • 可能更容易獲得在某些系統上運行
  • 它與PyPy
  • 可以「綠化」,並與GEVENT
  • 工作

與Django一起使用它的正確方法是導入它並告訴它在頂層文件中模擬MySQLdb,通常爲manage.py。將下面的代碼在你的manage.py的最頂端(或調用任何文件啓動服務器時):

try: 
    import pymysql 
    pymysql.install_as_MySQLdb() 
except ImportError: 
    pass 
+1

我應該補充一點,PyMySQL的官方版本不是(當前)使用上面的方法與Django 1.4兼容。如果你想嘗試的話,有一個分支似乎在https://github.com/CMGS/PyMySQL上工作。 –

+0

這節省了我很多時間 - 謝謝! –

+5

我會再添加一個理由:支持Python 3 – Alveoli

0

按我的經驗,我有困難了安裝「的MySQL-python的」 - (MySQLdb的) 。 它使我尋找更多的選擇,所以我發現pymysql,它也很容易安裝,並在第一次工作就像一個魅力。 所以我建議只使用pymysql而不是MySQLdb。

相關問題