You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:10:24