Python MySQL –用Python连接到MySQL数据库
在本教程中,您将学习如何使用MySQL Connector / Python API从Python连接到MySQL数据库。
设置样本数据库
首先,下载以下python_mysql数据库,解压缩该文件并将其复制到C:\ mysql \ python_mysql.sql等文件夹中:
下载Python MySQL示例数据库
接下来,使用mysql工具登录到MySQL Server:
mysql -u root -p
输入root用户的密码。
Enter password: ********
然后,创建一个名为python_mysql的新数据库:
mysql>create database python_mysql;
之后,选择数据库python_mysql:
mysql>use python_mysql;
最后,使用以下命令从文件加载数据:
mysql> source c:\mysql\python_mysql.sql
要仔细检查加载情况,请使用SHOW TABLES命令列出python_mysql数据库中的所有表:
mysql> SHOW TABLES;
输出将是:
+------------------------+ | Tables_in_python_mysql | +------------------------+ | authors | | book_author | | books | +------------------------+ 3 rows in set (0.01 sec)
使用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()
让我们详细研究该模块:
首先,从MySQL Connector / Python包导入mysql.connector和Error对象。
其次,使用connect()函数连接到MySQL服务器。
connect()函数接受四个参数:主机,数据库,用户和密码。
connect()函数建立与python_mysql数据库的连接,并返回MySQLConnection对象。第三,使用is_connected()方法检查与MySQL数据库的连接是否已成功建立。
如果发生异常(例如MySQL服务器不可用,数据库不存在或用户名或密码无效),Python将引发异常。
尝试除外块处理异常并显示错误。第四,使用MySQLConnection对象的close()方法关闭数据库连接。
要测试connect.py模块,请使用以下命令:
>python connect.py Connected to MySQL database
如果用户名或密码无效,则会出现以下错误:
1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
如果MySQL服务器不可用,您将收到以下错误:
2003: Can't connect to MySQL server on 'localhost:3306' (10061 No connection could be made because the target machine actively refused it)
请注意,在此示例中,我们在代码内对数据库配置(例如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
请注意,我们使用ConfigureParser包来读取配置文件。
让我们在REPL中测试此模块:
>>> from python_mysql_dbconfig import read_db_config >>> read_db_config() {'host': 'localhost', 'database': 'python_mysql', 'user': 'root', 'password': 'SecurePass1!'}
它按预期工作。
第三,创建一个新模块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()
让我们更详细地研究该模块:
首先,导入必要的对象,包括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.
在本教程中,您学习了如何使用connect()函数和MySQLConnection对象连接到数据库。
两种方式具有创建与MySQL数据库的连接的相同效果。