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 擴展。

  • 預設情況下,從 MySQL 8 開始,use_pure (使用純 Python 實作) 為 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 實作。