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

Haf*_*fiz 41 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已经上传到那里,这不是很重要吗?

Dan*_*son 60

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
Run Code Online (Sandbox Code Playgroud)

  • 我还要补充一个原因:支持Python 3 (7认同)
  • "绿化"是什么意思? (2认同)
  • 为什么要尝试/除外?如果您忘记安装pymysql,您肯定会想要一个明显的错误吗? (2认同)

Col*_*ole 16

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

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


Tau*_*uir 10

你的第一点:

根据pymysql wiki页面:

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

你的第二点:

如果django在你的本地主机上工作正常,那么你的开发应该没问题.