5.5 KiB
使用 Connector/Python 连接到 MySQL
原文:https://overiq.com/mysql-connector-python-101/connecting-to-mysql-using-connector-python/
最后更新于 2020 年 7 月 27 日
要连接到数据库,我们使用mysql.connector模块的connect()功能。它接受连接凭证并返回类型为MySQLConnection或CMySQLConnection的对象(如果安装了 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设置为True,Connector/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
我们现在知道如何连接到数据库。让我们看看如何处理错误。
使用配置文件
出于测试目的,将连接凭证硬编码到应用中是可以的,但是对于生产环境来说,这是不太可行的,原因有二。
- 任何能够访问源的人都可以查看连接细节。
- 迁移到新服务器时,您必须再次更新源代码。
更好的方法是将连接细节存储在外部文件中。由于 2.0 版本的 Connector/Python 可以从一个 Windows-INI 风格的文件中读取连接细节。
以下两个参数控制配置文件的设置:
| 争吵 | 默认 | 描述 |
|---|---|---|
option_files |
它分类要读取的配置文件。它的值可以是字符串或字符串列表。 | |
option_groups |
['client', 'connector_python'] |
它指定从中读取选项的节的名称。默认情况下,选项仅从client和connector_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()