MySQL 连接器/Python 开发人员指南  / 第 8 章连接器/Python C 扩展  /  8.1 使用连接器/Python C 扩展的应用程序开发

8.1 使用连接器/Python C 扩展的应用程序开发

从版本 2.1.1 开始安装连接器/Python 支持一个 use_pure参数, mysql.connector.connect()该参数指示是使用 MySQL 的纯 Python 接口还是使用 MySQL C 客户端库的 C 扩展:

  • 默认情况下,use_pure(使用纯 Python 实现)False从 MySQL 8 开始,True在早期版本中默认为。如果 C 扩展名在系统上不可用, use_pureTrue.

  • 在 Linux 上,C 和 Python 实现作为不同的包提供。您可以在同一系统上安装一个或两个实现。在 Windows 和 macOS 上,这些包包括这两种实现。

    对于包含这两种实现的连接器/Python 安装,可以选择通过将 use_pure=False(使用 C 实现)或 use_pure=True(使用 Python 实现)作为参数传递给 mysql.connector.connect().

  • 对于不包含 C 扩展的连接器/Python 安装,传递use_pure=Falsemysql.connector.connect()会引发异常。

  • 对于对 C 扩展(版本 2.1.1 之前)一无所知的较旧的连接器/Python 安装,无论其值如何,传递 use_puremysql.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=FalseC 扩展不可用,则连接器/Python 将自动回退到纯 Python 实现。