什么是PyMySQL,它与MySQLdb有什么不同?它会影响Django部署吗?

时间:2011-08-28 23:49:19

标签: python mysql django mysql-python pymysql

我刚刚使用PyMySQL而不是MySQLdb解决了我的Django 1.3应用程序中的一些问题。我按照本教程关于如何进行切换:http://web-eng-help.blogspot.com/2010/09/install-mysql-5-for-python-26-and.html

现在我想知道PyMySQL究竟是什么以及它与MySQLdb的区别。

我在localhost上使用它,然后将其上传到某个托管。

在localhost上使用PyMySQL并托管它们提供的任何内容是否可以?由于我已将base.py和introspection.py中的“MySQLdb”更改为“PyMySQL”,我是否需要在更改这些文件后将其上传到服务器?或者因为它是Django的文件,因为Django已经上传到那里了,这没关系吗?

5 个答案:

答案 0 :(得分:57)

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 :(得分:16)

PyMySQL和MySQLdb都是Python的数据库连接器,是使Python程序能够与MySQL服务器通信的库。

在部署应用时,通常不会上传核心Django文件。如果Django在您的部署服务器上运行良好,那么您肯定不需要在那里进行任何更改。 DB驱动程序甚至是ORM下面的一两步,当然,您编写的代码中没有一个取决于正在使用的代码。

答案 2 :(得分:10)

你的第一点:

根据pymysql wiki页面:

  

MySQLdb,是一个具有存在声誉的C扩展模块   很难编译,特别是如果你在Mac上。另外,   最终用户需要等待为每个新的二进制文件编译新的二进制文件   发布Python,MySQLdb永远不会在Jython,IronPython上运行,   或PyPy(没有类似cpyext或IronClad的东西)。我们还保持   Python 2和Python 3之间100%兼容,所以所有进步   2.x主干上的内容将立即在Python 3上提供。

你的第二点:

  

如果django在你的localhost上工作正常,那么应该没问题   你的发展。

答案 3 :(得分:1)

根据我的经验,我很难安装“MySQL-python” - (MySQLdb)。 它让我寻找更多的替代品,所以我找到了pymysql,它也很容易安装,并在第一次工作就像一个魅力。 所以我建议只使用pymysql而不是MySQLdb。

答案 4 :(得分:0)

我从这些话题开始,我只想说一个观察:PyMSQL将CPYTHON作为要安装的条件(可能对于性能https://pypi.org/project/PyMySQL/#requirements是可选的),而Cpyhton依赖于'C',所以我测试了Cpython而且在为C版本安装时也遇到了麻烦...然后两个实现都依赖于'C'[如果您想要性能],对我来说是同一回事...如果性能没有问题,也许PyMySQL很好没有Cpython,没有'C'。也许我们可以单独使用带有Python的PyMySQL进行启动,然后将Python切换到Cpython以获得更高的性能,这是一件好事,我们可以运行所有的东西,然后我们可以尝试切换到Cpython, 我们需要知道功能上的差异。为什么在Django PyMySQL中为您更好地运行,或者为某些问题提供解决方案,哪些问题呢?这也许是改变的重要内容。 MySQLdb可能直接依赖于“ C”,但是PyMSQL间接通过Cpython(在类似的性能情况下),我更喜欢直接依赖,而不受跳转的限制...问候。