在本教程中,您将学习如何使用 MySQL Connector/Python API 从 Python 连接到 MySQL 数据库。
设置示例数据库
首先,下载以下python_mysql
数据库,解压缩文件并将其复制到文件夹,例如C:\mysql\python_mysql.sql
:
接下来,使用mysql
工具登录MySQL服务器:
mysql -u root -p
Code language: SQL (Structured Query Language) (sql)
输入root
用户的密码。
Enter password: ********
Code language: SQL (Structured Query Language) (sql)
然后,创建一个名为python_mysql
的新数据库:
mysql>create database python_mysql;
Code language: SQL (Structured Query Language) (sql)
之后,选择数据库python_mysql
:
mysql>use python_mysql;
Code language: SQL (Structured Query Language) (sql)
最后,使用此命令从文件加载数据:
mysql> source c:\mysql\python_mysql.sql
Code language: SQL (Structured Query Language) (sql)
要仔细检查加载情况,请使用SHOW TABLES
命令列出python_mysql
数据库中的所有表:
mysql> SHOW TABLES;
Code language: SQL (Structured Query Language) (sql)
输出将是:
+------------------------+
| Tables_in_python_mysql |
+------------------------+
| authors |
| book_author |
| books |
+------------------------+
3 rows in set (0.01 sec)
Code language: JavaScript (javascript)
使用connect()
函数连接到 MySQL 数据库
让我们看一下下面的 Python 模块 ( connect.py
)。
import mysql.connector
from mysql.connector import Error
def connect():
""" Connect to MySQL database """
conn = None
try:
conn = mysql.connector.connect(host='localhost',
database='python_mysql',
user='root',
password='SecurePass1!')
if conn.is_connected():
print('Connected to MySQL database')
except Error as e:
print(e)
finally:
if conn is not None and conn.is_connected():
conn.close()
if __name__ == '__main__':
connect()
Code language: Python (python)
让我们详细研究一下这个模块:
- 首先,从 MySQL Connector/Python 包导入
mysql.connector
和Error
对象。 - 其次,使用
connect()
函数连接到 MySQL 服务器。connect()
函数接受四个参数:主机、数据库、用户和密码。connect()
函数建立与python_mysql
数据库的连接并返回MySQLConnection
对象。 - 第三,使用
is_connected()
方法检查与 MySQL 数据库的连接是否已成功建立。如果发生异常,例如 MySQL 服务器不可用、数据库不存在或用户名或密码无效,Python 将引发异常。try except
块处理异常并显示错误。 - 第四,使用
MySQLConnection
对象的close()
方法关闭数据库连接。
要测试connect.py
模块,请使用以下命令:
>python connect.py
Connected to MySQL database
Code language: CSS (css)
如果用户名或密码无效,您将收到以下错误:
1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Code language: JavaScript (javascript)
如果 MySQL 服务器不可用,您将收到以下错误:
2003: Can't connect to MySQL server on 'localhost:3306' (10061 No connection could be made because the target machine actively refused it)
Code language: JavaScript (javascript)
请注意,在本示例中,我们在代码中硬编码了数据库配置,例如localhost
、 python_mysql
、 root
,这不是一个好的做法,因此让我们使用数据库配置文件来修复代码。
使用MySQLConnection
对象连接到 MySQL 数据库
首先,创建一个名为config.ini
的数据库配置文件,并定义一个包含四个参数的部分,如下所示:
[mysql]
host = localhost
database = python_mysql
user = root
password =SecurePass1!
其次,创建一个名为python_mysql_dbconfig.py
的新模块,该模块从config.ini
文件中读取数据库配置并返回一个字典对象:
from configparser import ConfigParser
def read_db_config(filename='config.ini', section='mysql'):
""" Read database configuration file and return a dictionary object
:param filename: name of the configuration file
:param section: section of database configuration
:return: a dictionary of database parameters
"""
# create parser and read ini configuration file
parser = ConfigParser()
parser.read(filename)
# get section, default to mysql
db = {}
if parser.has_section(section):
items = parser.items(section)
for item in items:
db[item[0]] = item[1]
else:
raise Exception('{0} not found in the {1} file'.format(section, filename))
return db
Code language: Python (python)
请注意,我们使用ConfigureParser
包来读取配置文件。
让我们在 REPL 中测试这个模块:
>>> from python_mysql_dbconfig import read_db_config
>>> read_db_config()
{'host': 'localhost', 'database': 'python_mysql', 'user': 'root', 'password': 'SecurePass1!'}
Code language: Python (python)
它按预期工作。
第三,创建一个新模块connect2.py
,它使用MySQLConnection
对象连接到python_mysql
数据库。
from mysql.connector import MySQLConnection, Error
from python_mysql_dbconfig import read_db_config
def connect():
""" Connect to MySQL database """
db_config = read_db_config()
conn = None
try:
print('Connecting to MySQL database...')
conn = MySQLConnection(**db_config)
if conn.is_connected():
print('Connection established.')
else:
print('Connection failed.')
except Error as error:
print(error)
finally:
if conn is not None and conn.is_connected():
conn.close()
print('Connection closed.')
if __name__ == '__main__':
connect()
Code language: Python (python)
让我们更详细地检查该模块:
- 首先,导入必要的对象,包括
MySQLConnection
、 MySQL Connector/Python 包中的Error
和python_mysql_dbconfig
模块中的read_db_config
。 - 其次,读取数据库配置并将其传递到
connect()
函数中创建MySQLConnection
对象的新实例。其余代码的工作方式与第一个示例类似。
这是connect2
模块的测试:
>python connect2.py
Connecting to MySQL database...
connection established.
Connection closed.
Code language: CSS (css)
在本教程中,您学习了如何使用connect()
函数和MySQLConnection
对象连接到数据库。这两种方法具有创建与 MySQL 数据库的连接的相同效果。