Python调用MySQL存储过程参数传递报错求助
Python调用MySQL存储过程参数传递报错求助
兄弟,我一眼就瞅出你代码里的问题啦——callproc方法的参数传递方式不对!
先给你说清楚pymysql里callproc的正确用法:
- 第一个参数直接写存储过程的名字就行,不需要加
CALL关键字,这是很多新手容易踩的坑; - 第二个参数必须是一个元组或者列表,用来传递存储过程需要的参数,你现在直接把两个日期参数分开传,肯定会触发参数数量不匹配的错误。
给你改好的代码示例:
import pymysql # 建立数据库连接 mysql = pymysql.connect( host='localhost', user='root', password='', db='fact', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) try: cur = mysql.cursor() # 修正callproc的参数:去掉CALL,把日期参数打包成元组 cur.callproc('Buscar_fecha', (form.dt1.data, form.dt2.data)) # 获取存储过程的执行结果 result = cur.fetchall() # 如果存储过程涉及数据修改,需要提交事务 # mysql.commit() finally: # 记得关闭游标和连接,避免资源泄漏 cur.close() mysql.close()
另外还要注意几个小细节:
- 你原代码里把
fetchall的结果赋值给了comitt,这明显是拼写错误,建议改成result这类有意义的变量名; - 最好把数据库操作放在
try...finally块里,确保即使出错也能释放连接资源; - 如果你的存储过程只是查询操作,不需要
commit,但如果有插入/更新/删除操作,一定要记得调用mysql.commit()提交事务。
备注:内容来源于stack exchange,提问作者Joshua Flores
相关产品推荐
相关产品推荐

