46

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

现在我想知道 PyMySQL 实际上是什么以及它与 MySQLdb 有何不同。

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

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

4

5 回答 5

65

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
于 2012-12-28T22:58:31.937 回答
19

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

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

于 2011-08-28T23:57:44.223 回答
10

你的第一点:

根据pymysql wiki页面:

MySQLdb 是一个 C 扩展模块,以难以编译而著称,尤其是在您使用 Mac 时。此外,最终用户需要等待为每个新版本的 Python 编译新的二进制文件,而 MySQLdb 永远不会在 Jython、IronPython 或 PyPy(没有 cpyext 或 IronClad 之类的东西)上运行。我们还保持 Python 2 和 Python 3 之间 100% 的兼容性,因此在 2.x 主干上所做的所有改进都将立即在 Python 3 上可用。

你的第二点:

如果 django 在您的本地主机上运行良好,那么它在您的开发中应该没问题。

于 2011-08-29T00:26:12.203 回答
1

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

于 2018-01-29T06:28:03.890 回答
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 间接依赖(如果性能相似),

于 2019-10-27T13:44:35.567 回答