Python 中 MySQL 存储过程的参数传递

2023-04-05 00:00:00 参数 存储过程 传递

在Python中使用MySQL存储过程时,可以通过以下几种方式传递参数:

  1. 直接将参数拼接成SQL语句,然后执行:
import mysql.connector

conn = mysql.connector.connect(user='root', password='123456',
                               host='localhost', database='test')

cursor = conn.cursor()

# 定义存储过程
create_proc = """
CREATE PROCEDURE my_proc(IN name VARCHAR(20)) 
BEGIN 
SELECT * FROM user WHERE username=name; 
END"""

# 创建存储过程
cursor.execute(create_proc)

# 调用存储过程
params = ('pidancode.com',)
cursor.execute('CALL my_proc(%s)', params)

# 获取查询结果
result_set = cursor.fetchall()
for row in result_set:
    print(row)

# 关闭连接
cursor.close()
conn.close()
  1. 使用命名参数传递参数:
import mysql.connector

conn = mysql.connector.connect(user='root', password='123456',
                               host='localhost', database='test')

cursor = conn.cursor()

# 定义存储过程
create_proc = """
CREATE PROCEDURE my_proc(IN name VARCHAR(20)) 
BEGIN 
SELECT * FROM user WHERE username=name; 
END"""

# 创建存储过程
cursor.execute(create_proc)

# 调用存储过程
params = {'name': 'pidancode.com'}
cursor.callproc('my_proc', params)

# 获取查询结果
result_set = cursor.fetchall()
for row in result_set:
    print(row)

# 关闭连接
cursor.close()
conn.close()

在以上示例中,我们定义了一个名为my_proc的存储过程,该存储过程需要一个名为name的字符串类型参数。

在第一种方式中,我们使用了%s占位符将参数拼接成SQL语句并执行,然后通过execute方法获取查询结果。

在第二种方式中,我们使用了命名参数将参数传递给callproc方法,然后通过fetchall方法获取查询结果。

总体来说,使用命名参数传递参数更加简洁直观,同时避免了SQL注入的风险。

相关文章