从版本 2.1.1 开始安装连接器/Python 支持一个
use_pure
参数,
mysql.connector.connect()
该参数指示是使用 MySQL 的纯 Python 接口还是使用 MySQL C 客户端库的 C 扩展:
默认情况下,
use_pure
(使用纯 Python 实现)False
从 MySQL 8 开始,True
在早期版本中默认为。如果 C 扩展名在系统上不可用,use_pure
则True
.-
在 Linux 上,C 和 Python 实现作为不同的包提供。您可以在同一系统上安装一个或两个实现。在 Windows 和 macOS 上,这些包包括这两种实现。
对于包含这两种实现的连接器/Python 安装,可以选择通过将
use_pure=False
(使用 C 实现)或use_pure=True
(使用 Python 实现)作为参数传递给mysql.connector.connect()
. 对于不包含 C 扩展的连接器/Python 安装,传递
use_pure=False
给mysql.connector.connect()
会引发异常。对于对 C 扩展(版本 2.1.1 之前)一无所知的较旧的连接器/Python 安装,无论其值如何,传递
use_pure
给mysql.connector.connect()
都会引发异常。
在 macOS 上,如果您的连接器/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 客户端库。
如果您需要检查您的连接器/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 扩展不可用,则连接器/Python 将自动回退到纯 Python 实现。