MySQL 连接器/Python 作为 Django 引擎?

omg*_*rok 5 python mysql django mysql-connector-python

即使经过数小时的谷歌搜索和搜索堆栈溢出,也无法找到答案。我向您保证,我已经看到了所有可能被视为相关的答案,但没有一个解决了我面临的问题。无需再费周折 -

目前在 shell 中我可以这样做:

Python 2.7.11+ (default, Apr 17 2016, 14:00:29)
[GCC 5.3.1 20160413] on linux2
Type "help", "copyright", "credits" or "license" for more information. 
>>> from distutils.sysconfig import get_python_lib
>>> print get_python_lib()
/usr/lib/python2.7/dist-packages
>>> import mysql.connector
>>> db = mysql.connector.connect(user='root', password='test123', host='127.0.0.1', database='mydb')
>>> db
<mysql.connector.connection.MySQLConnection object at 0x7fd3a80536d0>
Run Code Online (Sandbox Code Playgroud)

验证我是否安装了此模块。但是,当我尝试转到settings.py文件以将DATABASE ENGINE设置为

DATABASES = {
    'default': {
        'ENGINE': 'mysql.connector.django',
        'NAME': 'mydb',
        'USER': 'root',
        'PASSWORD': 'test123',
        'HOST': '127.0.0.1',
        'PORT': '3306'
    }
}
Run Code Online (Sandbox Code Playgroud)

并尝试启动我的服务器,我不断收到错误消息:

django.core.exceptions.ImproperlyConfigured: 'mysql.connector.django'
isn't an available database backend.
Run Code Online (Sandbox Code Playgroud)

不知道如何解决这个问题。我使用的是 Django 版本 1.9.7,上面的代码片段中显示了 Python 版本

使用 'mysql.connector.django' 与使用 'django.db.backends.mysql' 有什么区别?

e4c*_*4c5 2

使用 'mysql.connector.django' 与使用 'django.db.backends.mysql' 之间有什么区别?

首先推荐使用前者,而不推荐使用后者。前者是完全支持的,但后者需要 1.1.x 版本,并且 django 文档中还有一个警告,最新版本的 django 可能不完全支持它。

MySQL 数据库 API 驱动程序

Python 数据库 API 在 PEP 249 中进行了描述。MySQL 具有三个实现此 API 的重要驱动程序:

MySQLdb 是一个本机驱动程序,由 Andy Dustman 开发和支持十多年。mysqlclient 是 MySQLdb 的一个分支,它特别支持 Python 3,并且可以用作 MySQLdb 的直接替代品。在撰写本文时,这是将 MySQL 与 Django 结合使用的推荐选择。MySQL Connector/Python 是来自 Oracle 的纯 Python 驱动程序,不需要 MySQL 客户端库或标准库之外的任何 Python 模块。所有这些驱动程序都是线程安全的并提供连接池。MySQLdb 是目前唯一不支持 Python 3 的数据库。

除了 DB API 驱动程序之外,Django 还需要一个适配器来从其 ORM 访问数据库驱动程序。Django 为 MySQLdb/mysqlclient 提供了一个适配器,而 MySQL Connector/Python 则包含了自己的适配器。