如何在Python中调用MySQL存储过程?含报错解决及GROUP含义咨询
问题解决:Python调用MySQL存储过程报错及GROUP关键字说明
一、Python调用存储过程错误修复
你遇到的TypeError: 'method' object is not iterable错误,原因是代码中cursor.stored_results是方法对象,必须加括号调用(cursor.stored_results())才能获取可迭代的结果集。
正确的Python调用代码
import mysql.connector from mysql.connector import Error host = 'localhost' user = 'root' password = 'root' database = 'varehusdb' try: connection = mysql.connector.connect(host=host, user=user, password=password, database=database) cursor = connection.cursor() # 调用存储过程 cursor.callproc("Kundeinfo") # 调用stored_results方法获取结果集 for result in cursor.stored_results(): # 读取所有结果并打印,也可按需逐行处理 rows = result.fetchall() for row in rows: print(row) print("存储过程执行成功") except Error as e: print("执行出错:", e) finally: # 关闭资源,避免泄漏 if cursor: cursor.close() if connection and connection.is_connected(): connection.close()
你的MySQL存储过程代码(已验证可执行)
USE varehusdb; DELIMITER $$ CREATE PROCEDURE Kundeinfo() BEGIN SELECT vare.VNr, vare.Betegnelse, kunde.Fornavn, kunde.Etternavn, kunde.Adresse, kunde.PostNr, ordrelinje.OrdreNr, ordrelinje.PrisPrEnhet, ordrelinje.PrisPrEnhet * ordrelinje.Antall AS TotalPris FROM vare JOIN ordrelinje ON vare.VNr = ordrelinje.VNr JOIN ordre ON ordrelinje.OrdreNr = ordre.OrdreNr JOIN kunde ON ordre.KNr = kunde.KNr ORDER BY vare.Betegnelse; END $$ DELIMITER ;
二、SQL中GROUP关键字的含义
SQL里的GROUP通常与BY组合成GROUP BY子句,核心作用是将查询结果按指定的一列或多列分组,分组后可配合SUM()、COUNT()、AVG()等聚合函数,对每组数据做统计计算。
举个实用示例:统计每个客户的订单总数量
SELECT kunde.KNr, COUNT(ordre.OrdreNr) AS 订单总数 FROM kunde JOIN ordre ON kunde.KNr = ordre.KNr GROUP BY kunde.KNr;
该语句会把相同客户编号(KNr)的记录归为一组,然后计算每组对应的订单数量。
内容的提问来源于stack exchange,提问作者LarsWiseGuy
相关产品推荐
相关产品推荐

