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

Posted

技术标签:

【中文标题】什么是 PyMySQL,它与 MySQLdb 有何不同?它会影响 Django 部署吗?【英文标题】:What is PyMySQL and how does it differ from MySQLdb? Can it affect Django deployment? 【发布时间】:2011-11-05 16:35:24 【问题描述】:

我刚刚通过使用 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已经上传到那里了,那没关系吗?

【问题讨论】:

pymysqlmysqldb (mysql-python) 包的纯python端口。因此,pymysql 可以安装在任何系统上,无需 C 编译器。安装mysqldb 可能需要编译器,如果您没有编译器,在 Windows 中会产生错误(error: Unable to find vcvarsall.bat)。 如果这个问题不那么广泛,它会更有用。你问了几件事:两个库之间的区别,如何将 PyMySQL 部署到某种共享托管环境(你没有告诉我们任何事情,因此我们无法帮助你),以及更广泛地说,在将 PyMySQL 与 Django 结合使用时需要注意哪些问题。这是三个不同的问题,最好这样问。 问题是关于我是否应该使用 PyMySQL,我有两个担心你会提出多个问题。 【参考方案1】:

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

【讨论】:

我应该补充一点,使用上述方法,PyMySQL 的官方版本(当前)与 Django 1.4 不兼容。如果你想试试的话,github.com/CMGS/PyMySQL 有一个叉子似乎可以工作。 我还要补充一个原因:支持 Python 3 “绿化”是什么意思? 为什么是 try/except?如果您忘记安装 pymysql,您肯定想要一个明显的错误吗? +1 使用 PyMySQL 的理由它是 MIT 许可证,如果您打算分发商业代码则比 MySQLdbs GPL 许可证更好。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

你的第一点:

根据pymysql wiki页面:

MySQLdb,是一个 C 扩展模块,享有盛誉 很难编译,特别是如果你在 Mac 上。此外, 最终用户需要等待为每个新的二进制文件编译 Python 的发布,MySQLdb 将永远不会在 Jython、IronPython、 或 PyPy(没有 cpyext 或 IronClad 之类的东西)。我们也维护 Python 2 和 Python 3 之间 100% 的兼容性,所以所有的进步 在 2.x 主干上制作的内容将立即在 Python 3 上可用。

你的第二点:

如果 django 在您的本地主机上运行良好,那么它应该可以正常运行 你的发展。

【讨论】:

是的,但我的意思是,虽然我在上面提到的 django 的两个文件中将 MySQLdb 更改为 pymysql,但它会产生问题吗?或者 django 已经存在于虚拟主机上?或者pymysql有吗?【参考方案4】:

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

【讨论】:

【参考方案5】:

我从这些主题开始,我只想说一个观察: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 间接依赖(在类似性能的情况下),我更喜欢直接依赖而没有跳转限制...问候。

【讨论】:

以上是关于什么是 PyMySQL,它与 MySQLdb 有何不同?它会影响 Django 部署吗?的主要内容,如果未能解决你的问题,请参考以下文章

什么是伪多项式时间?它与多项式时间有何不同?

return 语句的目的是啥?它与印刷有何不同?

什么是 HSQLDB(Hyper SQL)以及它与其他数据库有何不同?

什么是操作系统内核?它与操作系统有何不同? [关闭]

用pymysql代替MySQLdb

什么是以太?它与以太网有何关系?