从 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 客户端(如 mysql 或 mysqldump)不同,后者默认情况下会读取选项文件。要找出标准客户端在您的系统上读取哪些选项文件,请使用其 --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()
对其进行评估。这使得可以指定比简单标量更复杂的选项值。