与MySQL服务器的连接可以使用mysql.connector.connect ()
函数或mysql.connector.MySQLConnection ()
类:
CNX = mysql.connector。MySQLConnection(user='joe', database='test')
下表描述了可用于发起连接的参数。参数后面的星号(*)表示同义参数名,仅用于与其他Python MySQL驱动程序兼容。Oracle建议不要使用这些替代名称。
表6.2 Connector/Python的连接参数
参数名称 | 默认的 | 描述 |
---|---|---|
用户 (用户名 *) |
用于MySQL服务器身份验证的用户名。 | |
密码 (passwd *) |
用于在MySQL服务器上验证用户的密码。 | |
数据库 (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的默认值是根据MySQL Server 8.0的最新默认值生成的。 |
自动提交 |
假 |
是否自动提交事务。 |
time_zone |
设置time_zone 连接时的会话变量。 |
|
sql_mode |
设置sql_mode 连接时的会话变量。 |
|
get_warnings |
假 |
是否获取警告。 |
raise_on_warnings |
假 |
是否对警告引发异常。 |
connection_timeout (connect_timeout *) |
TCP和Unix套接字连接超时。 | |
client_flags |
MySQL客户端标志。 | |
缓冲 |
假 |
游标对象是否在执行查询后立即获取结果。 |
生 |
假 |
MySQL结果是否按原样返回,而不是转换为Python类型。 |
consume_results |
假 | 是否自动读取结果集。 |
ssl_ca |
包含SSL证书颁发机构的文件。 | |
ssl_cert |
SSL证书文件。 | |
ssl_disabled |
假 |
真正的 禁用SSL/TLS使用。从Connector/Python 8.0.26开始,TLSv1和TLSv1.1连接协议已弃用。 |
ssl_key |
包含SSL密钥的文件。 | |
ssl_verify_cert |
假 |
当设置为真正的 方法指定的证书文件来检查服务器证书ssl_ca 选择。任何不匹配都会导致ValueError 例外。 |
ssl_verify_identity |
假 |
当设置为真正的 ,另外执行主机名身份验证,检查客户端用于连接服务器的主机名与服务器发送给客户端的证书中的身份是否一致。Connector/Python 8.0.14中添加的选项。 |
force_ipv6 |
假 |
当设置为真正的 当一个地址同时解析为IPv4和IPv6时,使用IPv6。缺省情况下,采用IPv4协议。 |
dsn |
不支持(加薪)NotSupportedError 使用时)。 |
|
pool_name |
连接池名称。存储池名称仅限于字母数字字符和特殊字符. ,_ ,* ,$ ,# .存储池名称不能超过池。CNX_POOL_MAXNAMESIZE 字符长(默认为64)。 |
|
pool_size |
5 | 连接池大小。池大小必须大于0且小于等于池。CNX_POOL_MAXSIZE (默认32)。 |
pool_reset_session |
真正的 |
当连接返回到池时是否重置会话变量。 |
压缩 |
假 |
是否使用压缩客户端/服务器协议。 |
converter_class |
要使用的转换器类。 | |
故障转移 |
服务器故障转移顺序。 | |
option_files |
要读取哪些选项文件。2.0.0新增。 | |
option_groups |
(“客户端”,“connector_python”) |
从选项文件中读取哪些组。2.0.0新增。 |
allow_local_infile |
真正的 |
是否启用加载数据本地文件 .2.0.0新增。 |
use_pure |
假 截至8.0.11,和真正的 在早期版本中。如果只有一个实现(C或Python)可用,则会设置默认值以启用可用的实现。 |
是否使用纯Python或C扩展。如果use_pure = False 并且C扩展不可用,那么Connector/Python将自动退回到纯Python实现。可设置为mysql.connector.connect ()但不是MySQLConnection.connect ().2.1.1新增。 |
krb_service_principal |
中的配置,“@realm”默认为默认域krb5 . conf 文件。 |
必须为primary/instance@realm格式的字符串,例如ldap/ldapauth@MYSQL.COM,其中@realm可选。10bet靠谱8.0.23新增。 |
MySQL身份验证选项
使用MySQL进行身份验证用户名
而且密码
.
MySQL连接器/Python不支持MySQL 4.1之前版本的旧的、不太安全的密码协议。
当数据库
参数,则将当前数据库设置为给定值。若要稍后更改当前数据库,请执行使用
SQL语句或设置数据库
的属性MySQLConnection
实例。
默认情况下,Connector/Python尝试使用TCP/IP连接到本地主机上运行的MySQL服务器。的宿主
参数默认为IP地址127.0.0.1和港口
到3306年。Unix套接字通过设置来支持unix_socket
.不支持Windows平台上的命名管道。
Connector/Python 1.2.1及以上版本支持从MySQL 5.6起可用的身份验证插件。这包括mysql_clear_password
而且sha256_password
,两者都需要SSL连接。的sha256_password
插件不能在非ssl连接上工作,因为连接器/Python不支持RSA加密。
的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
论点。这是有用的,例如,如果MySQL服务器设置为UTC和时间戳
返回的值应该由MySQL转换为太平洋标准时间
时区。
SQL模式
MySQL支持所谓的SQL模式。这将全局或每个连接更改服务器的行为。例如,要将警告作为错误引发,请设置sql_mode
来传统的
.有关更多信息,请参见Server SQL模式.
故障诊断和错误处理
查询生成的警告会自动获取get_warnings
设置为真正的
.您也可以通过设置立即引发异常raise_on_warnings
来真正的
.考虑使用MySQLsql_mode将警告转换为错误的设置。
若要设置连接的超时值,请使用connection_timeout
.
使用客户端标志启用和禁用特性
MySQL使用客户标志启用或禁用特性。使用client_flags
参数,你可以控制所设置的内容。要找出可用的标志,请使用以下方法:
导入ClientFlag print '\n'.join(ClientFlag.get_full_info())
如果client_flags
没有指定(即为零),默认值用于MySQL 4.1及更高版本。如果指定的整数大于0
,确保所有标志设置正确。单独设置和取消设置标志的更好方法是使用列表。例如,to setFOUND_ROWS
,但禁用默认设置LONG_FLAG
:
flags = [ClientFlag.]FOUND_ROWS,-ClientFlag.LONG_FLAG] mysql.connector.connect(client_flags=flags)
结果集处理
默认情况下,MySQL连接器/Python不缓冲或预取结果。这意味着在执行查询之后,您的程序负责获取数据。这避免了查询返回大结果集时过度使用内存。如果您知道结果集足够小,可以一次性处理所有内容,则可以通过设置立即获取结果缓冲
来真正的
.也可以设置每个游标(参见章节6.9.2.6,“MySQLConnection.cursor()方法”).
查询生成的结果通常在客户机程序获取它们之前不会被读取。要自动使用和丢弃结果集,请设置consume_results
选项真正的
.结果是读取所有结果,对于较大的结果集可能会很慢。(在这种情况下,最好关闭并重新打开连接。)
类型转换
默认情况下,结果集中的MySQL类型会自动转换为Python类型。例如,DATETIME
列值变为datetime.datetime对象。若要禁用转换,请设置生
选项真正的
.您可以这样做以获得更好的性能或自己执行不同类型的转换。
SSL连接
使用SSL连接是可能的,当您Python安装支持SSL,也就是说,当它针对OpenSSL库进行编译时。当你提供ssl_ca
,ssl_key
而且ssl_cert
选项,连接切换到SSL,而client_flags
选项包括ClientFlag。SSL
值自动。可以将此方法与压缩
选项设置为真正的
.
从Connector/Python 2.2.2开始,如果MySQL服务器支持SSL连接,Connector/Python默认会尝试建立一个安全的(加密的)连接,否则会退回到未加密的连接。
从Connector/Python 1.2.1到Connector/Python 2.2.1,可以只使用ssl_ca
的见解。的ssl_key
而且ssl_cert
参数是可选的。然而,当给出either时,必须给出both或anAttributeError
是提高。
#注释(示例适用于Python v2和v3) from __future__ import print_function import sys #sys.path。Insert (0, 'python{0}/'.format(sys.version_info[0]))导入mysql。import ClientFlag config = {'user': 'ssluser', 'password': '密码”、“主机”:“127.0.0.1,client_flags: [ClientFlag。SSL], 'ssl_ca': '/opt/mysql/ SSL /ca。Pem ', 'ssl_cert': '/opt/mysql/ssl/client-cert. Pem ', 'ssl_cert'。Pem ', 'ssl_key': '/opt/mysql/ssl/client-key. Pem ', 'ssl_key'。pem `,} cnx = mysql.connector.connect(**config) cur = cnx.cursor(buffered=True) cur.execute("SHOW STATUS LIKE 'Ssl_cipher'") print(cur.fetchone()) cur.close() cnx.close()
连接池
用任何一个pool_name
或pool_size
参数,Connector/Python创建新的池。如果pool_name
参数没有给出connect ()
调用自动生成名称,该名称由宿主
,港口
,用户
,数据库
按此顺序给出了连接参数。如果pool_size
参数,默认大小为5个连接。
的pool_reset_session
允许控制当连接返回到池时是否重置会话变量。默认值是重置。
有关连接池的更多信息,请参见章节6.8.1,“连接器/Python连接池”.
协议压缩
布尔压缩
参数指示是否使用压缩的客户端/服务器协议(默认值)假
).属性提供了一种更简单的替代方法ClientFlag。压缩
国旗。此参数从Connector/Python 1.1.2开始可用。
转换器类
的converter_class
参数接受一个类,并在配置连接时设置它。一个AttributeError
的子类时引发转换。MySQLConverterBase
.
服务器故障转移
的connect ()
方法接受故障转移
参数,该参数提供在连接失败时用于服务器故障转移的信息。参数值是一个元组或字典列表(首选元组,因为它是不可变的)。每个字典都包含故障转移序列中给定服务器的连接参数。允许的字典值为:用户
,密码
,宿主
,港口
,unix_socket
,数据库
,pool_name
,pool_size
.此故障转移选项是在Connector/Python 1.2.1中添加的。
选项文件支持
从Connector/Python 2.0.0开始,使用两个选项支持选项文件connect ()
:
option_files
:要读取的选项文件。取值为文件路径名(字符串)或路径名字符串序列。默认情况下,Connector/Python不读取选项文件,因此必须显式给出此参数以读取选项文件。文件将按照指定的顺序读取。option_groups
:如果读取选项文件,则从选项文件中读取哪些组。取值为选项组名(字符串形式)或组名字符串序列。如果没有给出该参数,默认值为(“客户端”,“connector_python”)
要阅读(客户端)
而且(connector_python)
组。
有关更多信息,请参见章节6.7.2,“连接器/Python选项文件支持”.
加载数据本地文件
在Connector/Python 2.0.0之前,允许使用加载数据本地文件
,客户端必须显式设置ClientFlag。LOCAL_FILES
国旗。从2.0.0开始,默认情况下启用该标志。要禁用它,使用allow_local_infile
连接选项可设置为假
在连接时(默认为真正的
).
与其他连接接口的兼容性
passwd
,db
而且connect_timeout
与其他MySQL接口兼容有效,分别与密码
,数据库
而且connection_timeout
.后者优先。数据源名称语法或dsn
不使用;如果指定,则引发NotSupportedError
例外。
客户端/服务器协议实现
Connector/Python可以使用纯Python接口连接MySQL,也可以使用使用MySQL C客户端库的C扩展。的use_pure
mysql.connector.connect ()连接参数决定。Connector/Python 8中的默认值从真正的
(使用纯Python实现)来假
.设置use_pure
更改所使用的实现。
的use_pure
参数从Connector/Python 2.1.1开始可用。有关C扩展的更多信息,请参见连接器/Python C扩展.