Python MySQL – Connect to a MySQL Database in Python

在本教程中,您将学习如何使用 MySQL Connector/Python API 从 Python 连接到 MySQL 数据库。

设置示例数据库

MySQL Python 连接

首先,下载以下python_mysql数据库,解压缩文件并将其复制到文件夹,例如C:\mysql\python_mysql.sql

下载 Python MySQL 示例数据库

接下来,使用mysql工具登录MySQL服务器:

mysql -u root -pCode 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.sqlCode 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.connectorError对象。
  • 其次,使用connect()函数连接到 MySQL 服务器。 connect()函数接受四个参数:主机、数据库、用户和密码。 connect()函数建立与python_mysql数据库的连接并返回MySQLConnection对象。
  • 第三,使用is_connected()方法检查与 MySQL 数据库的连接是否已成功建立。如果发生异常,例如 MySQL 服务器不可用、数据库不存在或用户名或密码无效,Python 将引发异常。 try except块处理异常并显示错误。
  • 第四,使用MySQLConnection对象的close()方法关闭数据库连接。

要测试connect.py模块,请使用以下命令:

>python connect.py
Connected to MySQL databaseCode 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)

请注意,在本示例中,我们在代码中硬编码了数据库配置,例如localhostpython_mysqlroot ,这不是一个好的做法,因此让我们使用数据库配置文件来修复代码。

使用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 dbCode 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 包中的Errorpython_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 数据库的连接的相同效果。

本教程有帮助吗?