geekdoc-python-zh/docs/overiq/232.md

5.5 KiB
Raw Permalink Blame History

使用 Connector/Python 连接到 MySQL

原文:https://overiq.com/mysql-connector-python-101/connecting-to-mysql-using-connector-python/

最后更新于 2020 年 7 月 27 日


要连接到数据库,我们使用mysql.connector模块的connect()功能。它接受连接凭证并返回类型为MySQLConnectionCMySQLConnection的对象(如果安装了 C 扩展)。

下表列出了connect()函数的一些常见参数。

争吵 默认 描述
资料库 数据库名称
用户 要使用 MySQL 进行身份验证的用户名
密码 验证用户身份的密码
宿主 127.0.0.1 安装 MySQL 服务器的主机名
港口 Three thousand three hundred and six MySQL 服务器的 TCP/IP 端口

**注:**有关完整的论点列表,请参考官方文件。

下面清单中的代码连接到世界数据库并打印连接 id。

import mysql.connector

db = mysql.connector.connect(
    host='localhost',
    database='world',
    user='root',
    password='pass'
)

print("Connection ID:", db.connection_id)

print(db)

预期输出:

Connection ID:  14
<mysql.connector.connection_cext.CMySQLConnection object at 0x7ff200815c88>

因为我在一个安装了 C 扩展的 Linux 发行版上,connect()函数返回一个类型为CMySQLConnection的对象,而不是MySQLConnection

在未安装 C 扩展的系统上,输出将如下所示:

Connection ID:  15
<mysql.connector.connection.MySQLConnection object at 0x7fef0f102c88>

您也可以在字典中传递连接凭据,而不是将它们作为关键字参数传递。

import mysql.connector

connection_args = {
    'host': 'localhost',
    'database': 'world',
    'user': 'root',
    'password': 'pass'
}

db = mysql.connector.connect(**connection_args)

print("Connection ID:", db.connection_id)

print(db)

使用纯 Python 或 C 扩展

use_pure连接参数决定是否使用 C 扩展。如果use_pure设置为TrueConnector/Python 将使用纯 Python 实现。从 8.0.11 开始, use_pure参数默认为False。这就是前面的代码片段使用 C 扩展的原因。但是,如果use_pure设置为False并且 C 扩展不可用,那么 Connector/Python 将使用纯 Python 实现。

import mysql.connector

db = mysql.connector.connect(
    host='localhost',
    database='world',
    user='root',
    password='pass',
    use_pure=True       # use pure Python implementation
)

print("Connection ID:", db.connection_id)

print(db)

预期输出:

Connection ID: 18
<mysql.connector.connection.MySQLConnection object at 0x7fe4499f1c88>

关闭连接

当程序结束时,与数据库的连接会自动关闭。但是,最好在完成连接后显式关闭连接。

要关闭连接,我们使用MySQLConnection对象的close()方法。

import mysql.connector

db = mysql.connector.connect(
    host='localhost',
    database='world',
    user='root',
    password='pass',
    use_pure=True
)

print("Connection ID:", db.connection_id)

print(db)

db.close()   # close the connection

我们现在知道如何连接到数据库。让我们看看如何处理错误。

使用配置文件

出于测试目的,将连接凭证硬编码到应用中是可以的,但是对于生产环境来说,这是不太可行的,原因有二。

  1. 任何能够访问源的人都可以查看连接细节。
  2. 迁移到新服务器时,您必须再次更新源代码。

更好的方法是将连接细节存储在外部文件中。由于 2.0 版本的 Connector/Python 可以从一个 Windows-INI 风格的文件中读取连接细节。

以下两个参数控制配置文件的设置:

争吵 默认 描述
option_files 它分类要读取的配置文件。它的值可以是字符串或字符串列表。
option_groups ['client', 'connector_python'] 它指定从中读取选项的节的名称。默认情况下,选项仅从clientconnector_python部分读取。

使用如下连接凭证创建名为my.conf的新文件:

my.conf

[connector_python]
host = 127.0.0.1
database = world
user = root
password = pass
port  = 3306

下面清单中的代码从my.conf文件中读取连接细节。

import mysql.connector

db = mysql.connector.connect(option_files='my.conf')

print("Connection ID:", db.connection_id)

print(db)

db.close()

请注意,在my.conf文件中,我们已经在connector_python'部分下指定了连接细节,这是默认情况下 MySQL Connector/Python 将从其中读取选项的两个部分之一。如果要更改节名,请使用option_groups参数,如下所示:

[connection_details]
host = 127.0.0.1
database = blog
user = root
password = pass
port  = 3306

import mysql.connector

db = mysql.connector.connect(option_files='my.conf', option_groups=['connection_details'])

print("Connection ID:", db.connection_id)

print(db)

db.close()

我们还可以将连接细节分割成多个文件。当您想要跨连接共享一些配置时,这将非常有用。

my1.conf

[connector_python]
host = 127.0.0.1
port = 3306

my2.conf

[connector_python]
database = world
user = root
password = pass

要从多个配置文件中读取选项,请将option_files的值更改为列表。

import mysql.connector

db = mysql.connector.connect(option_files=['my1.conf', 'my1.conf'])

print("Connection ID:", db.connection_id)

print(db)

db.close()