MySQL Connector/Python 开发人员指南  /  Connector/Python C 扩展  /  使用 Connector/Python C 扩展进行应用程序开发

8.1 使用 Connector/Python C 扩展进行应用程序开发

从 2.1.1 版开始的 Connector/Python 安装支持对 mysql.connector.connect()use_pure 参数,该参数指示是否使用纯 Python 接口连接到 MySQL 或者使用使用 MySQL C 客户端库的 C 扩展。

  • 默认情况下,use_pure(使用纯 Python 实现)在 MySQL 8 及更高版本中为 False,而在更早版本中默认为 True。如果系统上没有 C 扩展,则 use_pureTrue

  • 在 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 实现。