从 2.1.1 版开始的 Connector/Python 安装支持对 mysql.connector.connect()
的 use_pure
参数,该参数指示是否使用纯 Python 接口连接到 MySQL 或者使用使用 MySQL C 客户端库的 C 扩展。
默认情况下,
use_pure
(使用纯 Python 实现)在 MySQL 8 及更高版本中为False
,而在更早版本中默认为True
。如果系统上没有 C 扩展,则use_pure
为True
。-
在 Linux 上,C 和 Python 实现作为不同的软件包提供。您可以在同一系统上安装一个或两个实现。在 Windows 和 macOS 上,软件包包含两个实现。
对于包含这两个实现的 Connector/Python 安装,可以可选地通过将
use_pure=False
(使用 C 实现)或use_pure=True
(使用 Python 实现)作为参数传递给mysql.connector.connect()
来切换实现。 对于不包含 C 扩展的 Connector/Python 安装,将
use_pure=False
传递给mysql.connector.connect()
会引发异常。对于不知道 C 扩展的旧版 Connector/Python 安装(版本 2.1.1 之前),无论
use_pure
的值如何,将其传递给mysql.connector.connect()
都会引发异常。
在 macOS 上,如果您的 Connector/Python 安装包含 C 扩展,但 Python 脚本无法使用它,请尝试将 DYLD_LIBRARY_PATH
环境变量设置为包含 C 客户端库的目录。例如
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib (for sh)
setenv DYLD_LIBRARY_PATH /usr/local/mysql/lib (for tcsh)
如果您从源代码构建了 C 扩展,则此目录应包含构建扩展所用的 C 客户端库。
如果您需要检查您的 Connector/Python 安装是否了解 C 扩展,请测试 HAVE_CEXT
值。有不同的方法可以做到这一点。假设您在字典中指定了用于 mysql.connector.connect()
的常用参数
config = {
'user': 'scott',
'password': 'password',
'host': '127.0.0.1',
'database': 'employees',
}
以下示例说明了将 use_pure
添加到连接参数的一种方法
import mysql.connector
if mysql.connector.__version_info__ > (2, 1) and mysql.connector.HAVE_CEXT:
config['use_pure'] = False
如果 use_pure=False
且 C 扩展不可用,则 Connector/Python 将自动回退到纯 Python 实现。