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

49 投票
5 回答
59579 浏览
提问于 2025-04-17 00:30

我刚刚在我的Django 1.3应用中解决了一些问题,方法是用PyMySQL替代了MySQLdb。我按照这个教程进行了切换:http://web-eng-help.blogspot.com/2010/09/install-mysql-5-for-python-26-and.html

现在我想知道PyMySQL到底是什么,它和MySQLdb有什么不同。

我是在本地使用它,之后会上传到一些托管服务上。

在本地和托管服务上使用PyMySQL可以吗?因为我已经把base.py和introspection.py中的"MySQLdb"改成了"PyMySQL",那么在更改这些文件后,我需要把它们上传到服务器吗?或者因为这些是Django的文件,Django会被上传到那里,所以其实没什么大不了的?

5 个回答

10

你提到的第一点:

根据 pymysql 的维基页面

MySQLdb 是一个用C语言写的扩展模块,大家都觉得它很难编译,尤其是在Mac电脑上。此外,用户每次Python有新版本时,都得等着新版本的二进制文件被编译出来。而且,MySQLdb在Jython、IronPython或PyPy上是无法运行的(除非使用像cpyext或IronClad这样的工具)。我们还确保Python 2和Python 3之间是100%兼容的,所以在2.x版本上做的所有改进都会立刻在Python 3上可用。

你提到的第二点:

如果django在你的本地环境中运行得很好,那么在你的开发环境中也应该没问题。

69

PyMySQL和MySQLdb提供了相同的功能——它们都是用来连接数据库的工具。它们的不同在于实现方式,MySQLdb是用C语言写的扩展,而PyMySQL则是纯Python写的。

尝试使用PyMySQL有几个好处:

  • 在某些系统上可能更容易运行
  • 它可以和PyPy一起使用
  • 它可以与“绿色”库一起使用,支持gevent

在Django中正确使用它的方法是先导入PyMySQL,然后告诉它假装成MySQLdb,这通常是在你的顶层文件中进行,通常是manage.py。你需要在manage.py的最上面加上以下代码(或者在你启动服务器时调用的其他文件中):

try:
    import pymysql
    pymysql.install_as_MySQLdb()
except ImportError:
    pass
19

PyMySQL和MySQLdb都是用来连接数据库的工具,专门为Python程序设计的,让Python程序能够和MySQL服务器进行交流。

在部署应用的时候,通常你不会上传Django的核心文件。如果你的Django在部署的服务器上运行得很好,那就绝对不需要去更改任何东西。数据库驱动程序的层级比ORM还要低,当然你写的代码也不依赖于使用哪个驱动。

撰写回答