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

7.2 连接器/Python 选项文件支持

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

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

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

Connector/Python 还支持选项文件中的!include!includedirinclusion 指令。这些指令的工作方式与其他 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)

默认情况下,连接器/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连接参数来读取选项文件,则默认情况下连接器/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')

ValueError如果选项文件无法读取或已被读取, Connector/Python 将引发一个错误。这包括包含指令读取的文件。

对于该[connector_python]组,仅接受连接器/Python 支持的选项。无法识别的选项会引发 a ValueError

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

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

Connector/Python 将选项文件中的选项值视为字符串并使用eval(). 这使得选项值的规范比简单的标量更复杂。