接口错误:没有可从中提取的结果集,使用python和mysql.connector

4jb9z9bj  于 2023-05-28  发布在  Mysql
关注(0)|答案(2)|浏览(92)

我已经准备了一个存储过程,如果我从MySQL控制台进行调用,它可以正常运行。但是当在python中运行mysql.connector控制器时,正确执行插入过程。
然而,结果并没有带来与fectchall(),因为以下错误:

File "/home/sis1/prueba/prueba.py", line 16, in <module>
    reg=conn.fetchall()
  File "/usr/lib/pymodules/python2.7/mysql/connector/cursor.py", line 551, in fetchall
    raise errors.InterfaceError("No result set to fetch from.")
InterfaceError: No result set to fetch from.`

下面是存储过程:

DROP PROCEDURE IF EXISTS pr_prueba;    
CREATE DEFINER = rooter@localhost PROCEDURE pr_prueba(IN p_emp tinyint,OUT mensaje varchar(50),OUT registros integer)    
BEGIN    
    DECLARE numreg INT (10);    
    DECLARE tabla VARCHAR (30);     
    DECLARE emp TINYINT(2);    
    SET @tabla = CONCAT("emp",p_emp,".usuario");    
    SET @emp = CAST(p_emp AS UNSIGNED);    
    SET @sql_text = CONCAT("INSERT INTO ",@tabla," ( name, lastname ) (SELECT UPPER(name), UPPER(lastname) FROM tablas GROUP BY tablas.operador);");    
    PREPARE stmt FROM @sql_text;    
    EXECUTE stmt;    
    DEALLOCATE PREPARE stmt;    
    SET @mensaje="OK";    
    SET @sql_text = CONCAT("SELECT COUNT(*) INTO @numreg FROM ",@tabla,";");    
    PREPARE stmt FROM @sql_text;    
    EXECUTE stmt;    
    DEALLOCATE PREPARE stmt;    
    SET @registros=@numreg;    
    SELECT @mensaje as mensaje, @registros as registros;    
END ;

下面是Python代码:

import sys    
import mysql.connector    
if (__name__=='__main__'):    
  db = mysql.connector.connect(host="192.168.1.1",user="de",passwd="de2",database="dbim" )    
  conn = db.cursor()    
  args=(1,"",0)    
  conn.callproc("pr_prueba",args)    
  reg=conn.fetchall()    
  try:    
    db.commit()    
  except:    
    db.rollback()    
    print "error"    
  conn.close()    
  db.close()
mfuanj7w

mfuanj7w1#

我自己发现了问题。我不得不换了句台词:

reg=conn.fetchall()

为此:

for reg in conn.next_proc_resultset():
  pass

我不知道这是否是最好的解决办法,但它的工作

qkf9rpyu

qkf9rpyu2#

我有这样的代码:

with self.connect_specific() as connection:
            with connection.cursor() as cursor:
                cursor.execute(query)
                result = connection.cursor().fetchall()

connection.cursor()被调用两次。我把它改成:

with self.connect_specific() as connection:
            with connection.cursor() as cursor:
                cursor.execute(query)
                result = cursor.fetchall()

而且成功了

相关问题