杰瑞科技汇

Python连接MySQL数据库步骤是什么?

使用官方驱动 mysql-connector-python (推荐)

这是 Oracle 官方提供的驱动,与 MySQL 数据库的兼容性最好,更新也最及时。

第 1 步:安装驱动

你需要使用 pip 来安装这个库,打开你的终端或命令行工具,运行以下命令:

pip install mysql-connector-python

如果你使用的是 Python 3,并且你的系统同时有 Python 2 和 Python 3,你可能需要使用 pip3

pip3 install mysql-connector-python

第 2 步:编写 Python 代码连接数据库

下面是一个完整的、分步的示例代码。

前提条件:

  • 你已经安装并启动了 MySQL 数据库服务。
  • 你有一个 MySQL 用户名和密码。
  • 你知道要连接的数据库的地址(主机名/IP)和端口(默认是 3306)。
  • 你可以创建一个用于测试的数据库。

示例代码:

import mysql.connector
from mysql.connector import Error
def connect_to_mysql():
    """连接到 MySQL 数据库并执行一些基本操作"""
    connection = None  # 初始化连接对象为 None
    cursor = None      # 初始化游标对象为 None
    try:
        # 1. 建立连接
        # 请将下面的占位符替换为你自己的数据库信息
        connection = mysql.connector.connect(
            host='localhost',      # 数据库主机地址
            database='your_database', # 你要连接的数据库名
            user='your_username',   # 数据库用户名
            password='your_password' # 数据库密码
        )
        if connection.is_connected():
            db_info = connection.get_server_info()
            print(f"成功连接到 MySQL 服务器,版本: {db_info}")
            # 2. 创建一个游标对象
            # 游标用于执行 SQL 查询
            cursor = connection.cursor()
            # 3. 执行一个简单的查询
            cursor.execute("SELECT database();")
            # 获取单条查询结果
            record = cursor.fetchone()
            print(f"你正在连接的数据库是: {record[0]}")
            # --- 示例:创建表并插入数据 ---
            print("\n--- 开始创建表并插入数据示例 ---")
            # 创建表的 SQL 语句
            create_table_query = """
            CREATE TABLE IF NOT EXISTS employees (
                id INT AUTO_INCREMENT PRIMARY KEY,
                name VARCHAR(255) NOT NULL,
                position VARCHAR(100),
                salary DECIMAL(10, 2)
            )
            """
            cursor.execute(create_table_query)
            print("表 'employees' 创建成功或已存在。")
            # 插入数据的 SQL 语句
            insert_query = "INSERT INTO employees (name, position, salary) VALUES (%s, %s, %s)"
            employee_data = ('张三', '软件工程师', 12000.00)
            cursor.execute(insert_query, employee_data)
            # 提交事务,这样新增的数据才会真正保存到数据库
            connection.commit()
            print(f"成功插入一条记录: {cursor.lastrowid}")
            # --- 示例:查询数据 ---
            print("\n--- 开始查询数据示例 ---")
            cursor.execute("SELECT id, name, position, salary FROM employees")
            # 获取所有查询结果
            results = cursor.fetchall()
            print("当前员工列表:")
            for row in results:
                print(f"ID: {row[0]}, 姓名: {row[1]}, 职位: {row[2]}, 薪资: {row[3]}")
    except Error as e:
        # 捕获并打印连接或查询过程中发生的错误
        print(f"连接或操作 MySQL 时发生错误: {e}")
    finally:
        # 4. 关闭游标和连接
        # 这是非常重要的步骤,可以释放资源
        if connection.is_connected() and cursor:
            cursor.close()
            connection.close()
            print("\nMySQL 连接已关闭。")
# 调用函数
if __name__ == "__main__":
    connect_to_mysql()

代码解析

  1. import: 导入了 mysql.connectorError
  2. mysql.connector.connect(...): 这是建立连接的核心函数。
    • host: 数据库服务器的地址,本地通常是 'localhost'
    • database: 你想操作的数据库的名称。
    • user: 你的 MySQL 用户名。
    • password: 你的 MySQL 密码。
  3. connection.is_connected(): 检查连接是否成功建立。
  4. connection.cursor(): 创建一个游标对象,游标就像一个指针,它让你能够执行 SQL 命令并获取结果。
  5. cursor.execute(sql_query): 执行一条 SQL 语句。
    • 注意安全: 在插入数据时,我们使用了 cursor.execute(sql, data_tuple) 的形式,而不是用字符串拼接(如 f"INSERT ... VALUES('{name}', ...)"),这种“参数化查询”的方式可以防止 SQL 注入攻击,是必须遵守的最佳实践。
  6. cursor.fetchone() / fetchall() / fetchmany(size): 获取查询结果。
    • fetchone(): 获取下一条结果。
    • fetchall(): 获取所有结果。
    • fetchmany(): 获取指定数量的结果。
  7. connection.commit(): 非常重要! 在执行 INSERT, UPDATE, DELETE 等修改数据的操作后,必须调用此方法来提交事务,否则更改不会被保存到数据库。
  8. try...except...finally 结构:
    • try: 尝试执行连接和数据库操作。
    • except: 如果发生错误(比如密码错误、数据库未启动),捕获异常并打印错误信息。
    • finally: 无论是否发生错误,这里的代码都会被执行,我们用它来确保游标和连接被正确关闭,这是防止资源泄漏的关键。

使用第三方库 PyMySQL

PyMySQL 也是一个非常流行的纯 Python MySQL 客户端库,它的使用方法与 mysql-connector-python 非常相似。

第 1 步:安装 PyMySQL

pip install PyMySQL

第 2 步:编写代码

PyMySQL 的 API 几乎和 mysql-connector-python 一样,所以你可以很轻松地在两者之间切换。

import pymysql
from pymysql import MySQLError
def connect_with_pymysql():
    """使用 PyMySQL 连接 MySQL 数据库"""
    connection = None
    cursor = None
    try:
        connection = pymysql.connect(
            host='localhost',
            user='your_username',
            password='your_password',
            database='your_database',
            cursorclass=pymysql.cursors.DictCursor  # 以字典形式返回结果,更易读
        )
        with connection.cursor() as cursor:
            # 执行查询
            sql = "SELECT `id`, `name` FROM `employees`"
            cursor.execute(sql)
            # 获取所有结果
            results = cursor.fetchall()
            print("使用 PyMySQL 查询结果 (字典格式):")
            for row in results:
                print(f"ID: {row['id']}, 姓名: {row['name']}")
            # 插入数据
            insert_sql = "INSERT INTO `employees` (`name`, `position`, `salary`) VALUES (%s, %s, %s)"
            cursor.execute(insert_sql, ('李四', '产品经理', 15000.00))
            connection.commit() # 提交事务
            print(f"成功插入记录,ID: {cursor.lastrowid}")
    except MySQLError as e:
        print(f"PyMySQL 连接或操作错误: {e}")
    finally:
        if connection:
            connection.close()
            print("\nPyMySQL 连接已关闭。")
# 调用函数
if __name__ == "__main__":
    connect_with_pymysql()

如何选择?

特性 mysql-connector-python (官方) PyMySQL (第三方)
开发者 Oracle (MySQL 官方) 社区驱动
实现语言 C 和 Python 纯 Python
性能 通常更高,因为部分代码是 C 实现的 纯 Python,性能略低,但通常足够
安装 pip install mysql-connector-python pip install PyMySQL
兼容性 与 MySQL 版本兼容性最好 兼容性好,广泛使用
推荐 首选,特别是对于生产环境 非常好的替代品,易于使用和部署

对于新项目,强烈推荐使用官方的 mysql-connector-python,如果你正在维护一个旧项目或者有特定的依赖要求,PyMySQL 也是一个可靠的选择。

希望这个详细的指南能帮助你顺利地在 Python 中连接 MySQL 数据库!

分享:
扫描分享到社交APP
上一篇
下一篇