杰瑞科技汇

Python如何调用MySQL存储过程?

Python 调用 MySQL 存储过程

在 Python 中调用 MySQL 存储过程,可以使用 mysql-connector-pythonPyMySQL 等库,下面我将分别介绍这两种方法的实现方式。

Python如何调用MySQL存储过程?-图1
(图片来源网络,侵删)

使用 mysql-connector-python

安装库

pip install mysql-connector-python

调用存储过程示例

import mysql.connector
from mysql.connector import Error
def call_stored_procedure():
    try:
        # 连接数据库
        connection = mysql.connector.connect(
            host='localhost',
            database='your_database',
            user='your_username',
            password='your_password'
        )
        if connection.is_connected():
            cursor = connection.cursor()
            # 调用无参数的存储过程
            cursor.callproc('your_stored_proc_name')
            # 调用带参数的存储过程
            # cursor.callproc('your_stored_proc_name', (param1, param2))
            # 获取结果
            for result in cursor.stored_results():
                for row in result.fetchall():
                    print(row)
    except Error as e:
        print(f"Error: {e}")
    finally:
        if connection.is_connected():
            cursor.close()
            connection.close()
call_stored_proc()

使用 PyMySQL

安装库

pip install pymysql

调用存储过程示例

import pymysql
def call_stored_procedure():
    try:
        # 连接数据库
        connection = pymysql.connect(
            host='localhost',
            database='your_database',
            user='your_username',
            password='your_password',
            cursorclass=pymysql.cursors.DictCursor
        )
        with connection.cursor() as cursor:
            # 调用无参数的存储过程
            cursor.callproc('your_stored_proc_name')
            # 调用带参数的存储过程
            # cursor.callproc('your_stored_proc_name', (param1, param2))
            # 获取结果
            results = cursor.fetchall()
            for row in results:
                print(row)
            # 提交事务
            connection.commit()
    except Exception as e:
        print(f"Error: {e}")
        connection.rollback()
    finally:
        connection.close()
call_stored_proc()

处理带参数的存储过程

如果存储过程有参数,可以这样调用:

# 假设存储过程定义为: PROCEDURE get_user_by_id(IN user_id INT, OUT user_name VARCHAR(100))
cursor.callproc('get_user_by_id', (123,))  # 123是输入参数,第二个参数是输出变量
# 获取输出参数
results = cursor.stored_results()
for result in results:
    # 第一个结果集是查询结果
    print("Query results:", result.fetchall())
# 获取输出参数的值
cursor.execute("SELECT @_get_user_by_id_1")  # @_procname_N,N是参数位置(从1开始)
output_param = cursor.fetchone()[0]
print("Output parameter:", output_param)

注意事项

  1. 确保存储过程在数据库中已存在
  2. 根据存储过程的参数类型(IN, OUT, INOUT)正确传递参数
  3. 处理结果集时,存储过程可能返回多个结果集
  4. 调用完成后记得关闭连接
  5. 对于事务操作,记得调用 commit()rollback()

完整示例(带参数和返回值)

import mysql.connector
def call_stored_proc_with_params():
    try:
        conn = mysql.connector.connect(
            host='localhost',
            database='test_db',
            user='root',
            password='password'
        )
        cursor = conn.cursor()
        # 调用存储过程,传入一个输入参数,获取一个输出参数
        cursor.callproc('add_user', ('john_doe', 30, 0))  # 第三个参数是输出变量
        # 获取输出参数
        cursor.execute("SELECT @_add_user_2")
        output = cursor.fetchone()[0]
        print(f"New user ID: {output}")
        # 获取结果集(如果有)
        for result in cursor.stored_results():
            print("Result set:", result.fetchall())
    except Error as e:
        print(f"Error: {e}")
    finally:
        if conn.is_connected():
            cursor.close()
            conn.close()
call_stored_proc_with_params()

就是在 Python 中调用 MySQL 存储过程的基本方法,根据你的具体需求,可能需要调整参数处理和结果获取的方式。

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