LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

如何在 Python 中使用 MySQL 数据库使用存储过程

zhenglin
2026年1月9日 14:44 本文热度 318

一、准备工作

首先需要安装 Python 操作 MySQL 的库,最常用的是 mysql-connector-python(官方库)或 pymysql,这里以官方库为例:


pip install mysql-connector-python

二、完整实现步骤

1. 先在 MySQL 中创建测试存储过程

首先我们需要一个可测试的存储过程,比如创建一个根据用户 ID 查询用户信息的存储过程:


-- 先创建测试表(可选)

CREATE TABLE IF NOT EXISTS users (

    id INT PRIMARY KEY AUTO_INCREMENT,

    name VARCHAR(50) NOT NULL,

    age INT,

    email VARCHAR(100)

);


-- 插入测试数据

INSERT INTO users (name, age, email) VALUES 

('张三', 25, 'zhangsan@test.com'),

('李四', 30, 'lisi@test.com');


-- 创建存储过程:根据ID查询用户信息

DELIMITER //  -- 临时修改语句结束符为//,避免与存储过程内的;冲突

CREATE PROCEDURE get_user_by_id(IN user_id INT, OUT user_name VARCHAR(50), OUT user_age INT)

BEGIN

    SELECT name, age INTO user_name, user_age FROM users WHERE id = user_id;

END //

DELIMITER ;  -- 恢复语句结束符为;


-- 另一个测试存储过程:无参数,查询所有用户

CREATE PROCEDURE get_all_users()

BEGIN

    SELECT * FROM users;

END;


2. Python 调用存储过程的代码实现

下面是 Python 调用存储过程的完整代码,包含两种常见场景:带输入/输出参数的存储过程无参数的存储过程

from mysql.connector import Error


def call_mysql_procedure():

    # 数据库连接配置

    config = {

        'host': 'localhost',       # 数据库地址

        'user': 'root',            # 用户名

        'password': '你的数据库密码', # 密码

        'database': 'test_db'      # 数据库名(替换为你的库名)

    }


    connection = None

    try:

        # 1. 建立数据库连接

        connection = mysql.connector.connect(**config)

        if connection.is_connected():

            cursor = connection.cursor()


            # ========== 场景1:调用带输入/输出参数的存储过程 ==========

            # 定义输入参数和输出参数

            user_id = 1  # 输入参数

            user_name = None  # 输出参数(初始化为None)

            user_age = None   # 输出参数(初始化为None)


            # 调用存储过程:callproc(存储过程名, (参数列表))

            cursor.callproc('get_user_by_id', (user_id, user_name, user_age))


            # 获取输出参数(存储过程执行后,参数会被更新,存在cursor.stored_results()中)

            for result in cursor.stored_results():

                # 或者直接通过 cursor.outputs 获取(不同版本可能略有差异)

                output_params = result.fetchone()

                if output_params:

                    user_name, user_age = output_params

            print(f"场景1 - 查询ID为{user_id}的用户:")

            print(f"姓名:{user_name},年龄:{user_age}\n")


            # ========== 场景2:调用无参数的存储过程(返回结果集) ==========

            print("场景2 - 查询所有用户:")

            cursor.callproc('get_all_users')  # 无参数,传入空元组或省略

            # 遍历结果集

            for result in cursor.stored_results():

                users = result.fetchall()  # 获取所有结果

                # 打印表头

                columns = [desc[0] for desc in result.description]

                print("\t".join(columns))

                # 打印数据

                for user in users:

                    print("\t".join(str(col) for col in user))


            # 提交事务(如果存储过程有修改操作,必须提交)

            connection.commit()


    except Error as e:

        print(f"数据库操作出错:{e}")

        # 出错时回滚事务

        if connection:

            connection.rollback()

    finally:

        # 关闭游标和连接

        if connection and connection.is_connected():

            if cursor:

                cursor.close()

            connection.close()

            print("\n数据库连接已关闭")


if __name__ == "__main__":

    call_mysql_procedure()



三、关键代码解释

  1. 连接数据库:通过 mysql.connector.connect() 传入配置参数建立连接,注意替换为你的数据库地址、用户名、密码和库名。

  2. 调用存储过程核心方法cursor.callproc(proc_name, params)

    • proc_name:存储过程名称(字符串)。

    • params:参数列表(元组),顺序需与存储过程的参数(IN/OUT/INOUT)一一对应。

  3. 获取输出参数/结果集

    • 带输出参数的存储过程:执行 callproc 后,通过 cursor.stored_results() 遍历结果,获取输出参数的值。

    • 返回结果集的存储过程:同样通过 cursor.stored_results() 获取结果集,再用 fetchone()/fetchall() 读取数据。

  4. 事务处理:如果存储过程包含插入/更新/删除操作,必须调用 connection.commit() 提交事务;出错时用 connection.rollback() 回滚。

  5. 资源释放:最后必须关闭游标和连接,避免资源泄漏。


参考文章:原文链接





该文章在 2026/1/9 14:44:29 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved