MySQL Connector/Python 开发人员指南  /  Connector/Python 连接建立  /  Connector/Python 选项文件支持

7.2 Connector/Python 选项文件支持

从 2.0.0 版本开始,Connector/Python 能够从选项文件中读取选项。(有关 MySQL 中选项文件的一般信息,请参阅 使用选项文件。)connect() 调用的两个参数控制 Connector/Python 程序中选项文件的使用

  • option_files:要读取哪些选项文件。该值可以是文件路径名(字符串)或路径名字符串序列。默认情况下,Connector/Python 不读取任何选项文件,因此必须显式给出此参数才能读取选项文件。文件按指定的顺序读取。

  • option_groups:如果读取选项文件,则从选项文件中读取哪些组。该值可以是选项组名称(字符串)或组名称字符串序列。如果未给出此参数,则默认值为 ['client', 'connector_python'],以读取 [client][connector_python] 组。

Connector/Python 还支持选项文件中的 !include!includedir 包含指令。这些指令的工作方式与其他 MySQL 程序相同(请参阅 使用选项文件)。

此示例将单个选项文件指定为字符串

cnx = mysql.connector.connect(option_files='/etc/mysql/connectors.cnf')

此示例将多个选项文件指定为字符串序列

mysql_option_files = [
    '/etc/mysql/connectors.cnf',
    './development.cnf',
]
cnx = mysql.connector.connect(option_files=mysql_option_files)

默认情况下,Connector/Python 不读取选项文件,以便与 2.0.0 之前的版本向后兼容。这与标准 MySQL 客户端(如 mysqlmysqldump)不同,后者默认情况下会读取选项文件。要找出标准客户端在您的系统上读取哪些选项文件,请使用其 --help 选项调用其中一个客户端并检查输出。例如

$> mysql --help
...
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
...

如果指定 option_files 连接参数来读取选项文件,则 Connector/Python 默认情况下会读取 [client][connector_python] 选项组。要显式指定要读取哪些组,请使用 option_groups 连接参数。以下示例仅读取 [connector_python]

cnx = mysql.connector.connect(option_files='/etc/mysql/connectors.cnf',
                              option_groups='connector_python')

connect() 调用中指定的其他连接参数优先于从选项文件中读取的选项。假设 /etc/mysql/connectors.conf 包含以下行

[client]
database=cpyapp

以下 connect() 调用不包含 database 连接参数。生成的连接使用选项文件中指定的数据库 cpyapp

cnx = mysql.connector.connect(option_files='/etc/mysql/connectors.cnf')

相反,以下 connect() 调用指定的默认数据库与选项文件中找到的数据库不同。生成的连接使用 cpyapp_dev 作为默认数据库,而不是 cpyapp

cnx2 = mysql.connector.connect(option_files='/etc/mysql/connectors.cnf',
                               database='cpyapp_dev')

如果无法读取选项文件或已读取选项文件,则 Connector/Python 会引发 ValueError。这包括通过包含指令读取的文件。

对于 [connector_python] 组,仅接受 Connector/Python 支持的选项。无法识别的选项会导致引发 ValueError

对于其他选项组,Connector/Python 会忽略无法识别的选项。

命名的选项组不存在不是错误。

Connector/Python 将选项文件中的选项值视为字符串,并使用 eval() 对其进行评估。这使得可以指定比简单标量更复杂的选项值。