Python 中 MySQL 存储过程的参数传递
在Python中使用MySQL存储过程时,可以通过以下几种方式传递参数:
- 直接将参数拼接成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()
- 使用命名参数传递参数:
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注入的风险。
相关文章