Python MySQL –用Python连接到MySQL数据库

时间:2019-11-20 08:52:39  来源:igfitidea点击:

在本教程中,您将学习如何使用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数据库的连接的相同效果。