7.1连接器/ Python连接参数

可以建立与MySQL服务器的连接使用mysql.connector.connect ()函数或mysql.connector.MySQLConnection ()类:

cnx = mysql.connector。数据库连接(用户=“乔”=“测试”)cnx = MySQLConnection(用户=“乔”,数据库= '测试')

下表描述了参数,可用于启动一个连接。星号(*)后一个参数表示的参数名称,只能与其他Python MySQL驱动程序的兼容性。Oracle建议不使用这些替代名称。

表7.1为连接器/ Python连接参数

参数名称 默认的 描述
用户(用户名*) 用户名与MySQL服务器用于验证。
密码(passwd*) 与MySQL服务器的密码进行身份验证的用户。
密码,2,password3 多因素身份验证(MFA) /狗;密码是一个别名密码。在8.0.28补充道。
数据库(db*) 连接时使用的数据库名称与MySQL服务器。
主机 127.0.0.1 MySQL服务器的主机名或IP地址。
港口 3306年 MySQL服务器的TCP / IP端口。必须是一个整数。
unix_socket Unix的套接字文件的位置。
auth_plugin 身份验证插件使用。在这次1.2.1补充道。
use_unicode 真正的 是否使用Unicode。
字符集 utf8mb4 使用哪个MySQL字符集。
排序 utf8mb4_general_ai_ci(是utf8_general_ci在2.倍 使用哪个MySQL排序。8。x生成默认值从8.0最新的MySQL服务器缺省值。
自动提交 是否自动提交事务。
time_zone 设置time_zone在连接时会话变量。
sql_mode 设置sql_mode在连接时会话变量。
get_warnings 是否获取警告。
raise_on_warnings 是否引发异常的警告。
connection_timeout(connect_timeout*) TCP和Unix socket连接超时。
client_flags MySQL客户端旗帜。
缓冲 是否游标对象获取结果后立即执行查询。
MySQL结果是否返回,而不是转换为Python类型。
consume_results 是否自动读取结果集。
tls_versions [" TLSv1.2”、“TLSv1.3”) TLS版本支持;允许TLSv1.2和TLSv1.3版本。版本TLSv1和连接器/ Python 8.0.28 TLSv1.1被移除。
ssl_ca 文件包含SSL证书的权威。
ssl_cert 文件包含SSL证书文件。
ssl_disabled 真正的禁用SSL / TLS的使用。TLSv1和TLSv1.1连接协议被弃用的连接器/ Python 8.0.26连接器/ Python 8.0.28和删除。
ssl_key 包含SSL密钥文件。
ssl_verify_cert 当设置为真正的,检查服务器证书指定的证书文件ssl_ca选择。任何不匹配会导致ValueError例外。
ssl_verify_identity 当设置为真正的,另外执行主机名身份验证通过检查主机名,连接到服务器的客户端使用证书中的身份,服务器发送到客户端。选项中添加连接器/ Python 8.0.14。
force_ipv6 当设置为真正的时,使用IPv6地址解析为两个IPv4和IPv6。默认情况下,在这种情况下使用IPv4。
oci_config_file ”“

可选定义一个特定的路径authentication_oci服务器端身份验证配置文件。

dsn 不支持(提高NotSupportedError使用时)。
pool_name 连接池的名字。池名称仅限于字母数字字符和特殊字符,_,*,美元,#。必须不超过池名称pooling.CNX_POOL_MAXNAMESIZE64字符(默认)。
pool_size 5 连接池的大小。池的大小必须大于0小于或等于pooling.CNX_POOL_MAXSIZE(默认32)。
pool_reset_session 真正的 是否要重置会话变量当返回连接池。
压缩 是否使用压缩客户机/服务器协议。
converter_class 转换器类来使用。
converter_str_fallback 使转换值类型不受支持的str连接器/ Python转换器类或一个自定义转换器类。
故障转移 服务器故障转移序列。
option_files 哪个选项文件阅读。在2.0.0补充道。
option_groups (“客户端”,“connector_python”) 这组读从选择文件。在2.0.0补充道。
allow_local_infile 真正的 是否启用数据加载本地INFILE。在2.0.0补充道。
use_pure 8.0.11,和真正的在早期的版本。如果只有一个实现(C或Python)可用,那么则设置默认值,使可用的实现。 是否使用纯Python或C扩展。如果use_pure = False和C扩展不可用,那么连接器/ Python会自动回到纯Python实现。可以设置的mysql.connector.connect ()但不是MySQLConnection.connect ()。在2.1.1补充道。
krb_service_principal “@realm”默认为默认的领域,如中配置krb5 . conf文件。 必须是一个字符串形式的“主/ instance@realm”如“ldap / ldapauth@MYSQL。COM”,“@realm”是可选的。在8.0.23补充道。

MySQL身份验证选项

身份验证与MySQL使用用户名密码

请注意

MySQL连接器/ Python不支持旧的,低收入低保险密码协议的MySQL版本4.1。

数据库论点是,当前数据库设置为给定的值。改变当前数据库后,执行使用SQL语句或设置数据库财产的MySQLConnection实例。

默认情况下,连接器/ Python试图连接到一个MySQL服务器在本地主机上运行使用TCP / IP。的主机参数默认为IP地址127.0.0.1和港口到3306年。支持Unix套接字设置unix_socket。命名管道在Windows平台上不受支持。

连接器/ Python支持身份验证插件可用的MySQL 5.6。这包括mysql_clear_passwordsha256_password,这两个需要SSL连接。的sha256_password通过非ssl连接插件不工作因为连接器/ Python不支持RSA加密。

连接器/ Python支持多因素身份验证(狗)v8.0.28的利用密码(别名密码),2,password3连接选项。

connect ()方法支持一个auth_plugin参数,可用于强制使用一个特定的插件。例如,如果服务器配置为使用sha256_password默认情况下,你想连接到一个帐户进行身份验证使用mysql_native_password使用SSL连接或指定auth_plugin = ' mysql_native_password '

字符编码

默认情况下,来自MySQL作为Python返回Unicode字符串字面值。要改变这种行为,集use_unicode。你可以改变通过字符设置为客户机连接字符集论点。连接到MySQL后更改字符集,设置字符集财产的MySQLConnection实例。在使用这种技术者优先组名称直接的SQL语句。类似于字符集财产,你可以设置排序MySQL为当前会话。

交易

自动提交默认值,所以不会自动提交事务。调用commit ()的方法MySQLConnection实例后您的应用程序内做一组相关的插入、更新和删除操作。数据一致性和高吞吐量的写操作,最好离开自动提交配置选项关闭时使用InnoDB或其他事务表。

时区

时区可以设置每个连接使用time_zone论点。这是有用的,例如,如果将UTC和MySQL服务器时间戳返回的值应该MySQL的转换太平洋标准时间时区。

SQL模式

MySQL支持所谓的SQL模式。改变全球服务器的行为或每个连接。例如,警告作为错误,集sql_mode传统的。有关更多信息,请参见服务器的SQL模式

故障排除和错误处理

警告时自动生成的查询获取get_warnings被设置为真正的。你也可以通过设置立即引发一个异常raise_on_warnings真正的。考虑使用MySQLsql_mode设置警告变成错误。

为连接设置一个超时值,使用connection_timeout

启用和禁用功能使用客户端旗帜

MySQL使用客户标志启用或禁用功能。使用client_flags参数,控制的设定。找出旗帜,使用以下:

从mysql.connector。常量进口ClientFlag打印' \ n ' . join (ClientFlag.get_full_info ())

如果client_flags没有指定(也就是说,它是零),违约是用于MySQL 4.1和更高版本。如果你指定一个整数比0正确地设置,确保所有旗帜。一个更好的方法来设置和设置标志分别是使用一个列表。例如,设置FOUND_ROWS,但禁用默认LONG_FLAG:

旗帜= [ClientFlag。FOUND_ROWS,-ClientFlag.LONG_FLAG] mysql.connector.connect(client_flags=flags)

结果集处理

默认情况下,MySQL连接器/ Python不缓冲或预取结果。这意味着在执行一个查询,您的程序负责抓取数据。这避免了过多的内存使用时返回大型结果集的查询。如果你知道足够小,处理所有结果集,您可以获取结果立即通过设置缓冲真正的。还可以设置每光标(见部分10.2.6”MySQLConnection.cursor()方法”)。

查询生成的结果通常是不读,直到客户端程序获取它们。自动使用和丢弃结果集,设置consume_results选项真正的。结果是,所有的结果都是阅读,这对于大型结果集可能会很慢。(在这种情况下,它可能是更可取的关闭和重新连接)。

类型转换

默认情况下,MySQL在结果集类型自动转换到Python类型。例如,一个DATETIME列值变成了datetime.datetime对象。禁用转换设置选项真正的。你可能这样做是为了获得更好的性能或执行不同类型的转换。

通过SSL连接

可能当你使用SSL连接Python安装支持SSL,也就是说,在编译时OpenSSL库。当你提供ssl_ca,ssl_keyssl_cert选项,SSL连接交换机,client_flags选项包括ClientFlag.SSL值自动。您可以使用此结合压缩选项设置为真正的

2.2.2连接器/ Python,如果MySQL服务器支持SSL连接,连接器/ Python试图建立一个安全(加密)连接在默认情况下,回落到一个未加密的连接。

从连接器/ Python 1.2.1通过连接器/ Python 2.2.1,可以使用只有建立SSL连接ssl_ca的见解。的ssl_keyssl_cert参数是可选的。然而,当,都必须被给予或AttributeError是提高。

#注意有效期(例子是Python v2和v3)从__future__进口print_function进口sys # sys.path。插入(0,' python {0} / .format (sys.version_info[0]))进口mysql。从mysql.connector连接器。常量进口ClientFlag配置={“用户”:“ssluser”,“密码”:“密码”、“主机”:“127.0.0.1,client_flags: [ClientFlag。SSL),“ssl_ca”: ' / opt / mysql / SSL / ca。pem”、“ssl_cert ': ' / opt / mysql / ssl / client-cert。pem”、“ssl_key ': ' / opt / mysql / ssl / client-key。pem”} cnx = mysql.connector.connect(* *配置)cur = cnx.cursor(缓冲= True) cur.execute(“显示状态像Ssl_cipher”)打印(cur.fetchone ()) cur.close () cnx.close ()

连接池

用的pool_namepool_size论点,连接器/ Python创建新池。如果pool_name参数不是给定的,connect ()电话自动生成名称、由哪个的主机,港口,用户,数据库连接参数给出,这个顺序。如果pool_size参数不是给定的,默认大小是5连接。

pool_reset_session允许控制会话变量是否重置当连接返回到池中。默认是重置。

关于连接池的更多信息,请参阅9.1节,“连接器/ Python连接池”

协议压缩

布尔压缩参数表示是否使用压缩(默认客户端/服务器协议)。这提供了一个更简单的选择设置ClientFlag.COMPRESS国旗。该参数可以作为连接器/ Python 1.1.2。

转换器类

converter_class参数需要一个类,使它在配置连接。一个AttributeError提高如果没有自定义转换器类的一个子类conversion.MySQLConverterBase

服务器故障转移

connect ()方法接受一个故障转移观点:提供信息用于服务器故障转移的事件连接失败。参数值是一个元组或字典的列表(元组是首选,因为它是nonmutable)。每个字典包含连接参数对于一个给定的服务器故障转移的序列。允许字典值:用户,密码,主机,港口,unix_socket,数据库,pool_name,pool_size。这个故障转移选项添加连接器/ Python 1.2.1。

选择文件支持

作为连接器/ Python 2.0.0选项文件支持使用两个选项connect ():

  • option_files:哪个选项文件阅读。值可以是一个文件路径名(字符串)或一个路径名字符串的序列。默认情况下,连接器/ Python读没有选择文件,所以这个观点必须明确导致选项文件被读取。读取文件的顺序指定。

  • option_groups:从选择读取文件组,如果选择文件读取。值可以是一个选项组名(一个字符串)或组名称的字符串序列。如果没有这个论点,默认值是(“客户端”,“connector_python”)阅读(客户端)(connector_python)组。

有关更多信息,请参见7.2节,“连接器/ Python文件支持”

数据加载本地INFILE

前连接器/ Python 2.0.0,以便使用数据加载本地INFILE,客户必须显式地设置ClientFlag.LOCAL_FILES国旗。2.0.0,这个标志是默认启用。禁用它,allow_local_infile连接选项可以设置在连接时间(默认真正的)。

Compatibitility与其他连接接口

passwd,dbconnect_timeout是有效的与其他MySQL接口的兼容性和分别是一样的吗密码,数据库connection_timeout。后者优先考虑。数据源名称或语法dsn不使用;如果指定,它提出了一个NotSupportedError例外。

客户端/服务器协议的实现

连接器/ Python可以使用纯Python接口MySQL, C或C扩展使用MySQL客户端库。的use_puremysql.connector.connect ()连接参数决定了哪些。在连接器/ Python 8从默认的改变真正的(使用纯Python实现)。设置use_pure改变所使用的实现。

use_pure参数是作为连接器/ Python 2.1.1。关于C扩展的更多信息,请参阅第八章,连接器/ Python C扩展