2011-09-12 2 views
1

Voir cette procédure stockéeSQL_CALC_FOUND_ROWS dans la procédure de MySQL stockées avec python

-- -------------------------------------------------------------------------------- 
-- Routine DDL 
-- -------------------------------------------------------------------------------- 
DELIMITER $$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `get_followers`(in _user_id int,in _topic_id int,in _type int) 
MAIN:BEGIN 

SELECT SQL_CALC_FOUND_ROWS follow.user_id 
      -- COUNT(follow.user_id) AS _topic_idcount 
FROM 
    follow 
WHERE 
    follow.followee_user_id = _user_id 
    AND (topic_id = _topic_id OR topic_id = 0) 
GROUP BY follow.user_id; 
SELECT FOUND_ROWS() AS count; 

END 

Quand je suis utiliser l'appel de test à cette fonction de procédure stockée dans Workbench mysql il donne résultat attendu que le nombre de comptage. Mais quand j'exécute du code python et que je jette le json out put de cette requête, il donne le résultat suivant.

[{"user_id": 3}, {"user_id": 4}, {"user_id": 5}] 

Selon mon avis, il n'envisage pas SELECT FOUND_ROWS() AS count; cette déclaration quand je l'appelle code python forme SP en jachère

results = execute_sp("get_followers", [user_id, topic_id, type]) 

ici execut est ma fonction personnalisée.

def execute_sp(sp_name, paramaters): 
    #helper method to run sp's and return results 
    db = Db() 
    cursor = db.cursor() 
    cursor.callproc(sp_name,paramaters) 
    results = cursor.fetchallDict() 
    cursor.close() 
    return results 

plaidoyers me aident à résoudre ce .....

Répondre

1

Vous devez essayer pour voir si cela fonctionne - je ne peux pas tester pour le moment ...

results = cursor.fetchallDict() retourne le premier jeu de résultats, en ce qui concerne mysqldb. C'est à dire. le résultat du premier SELECT. Essayez d'ajouter un appel nextset(), comme ceci:

def execute_sp(sp_name, paramaters): 
    #helper method to run sp's and return results 
    db = Db() 
    cursor = db.cursor() 
    cursor.callproc(sp_name,paramaters) 
    cursor.nextset() #Need the second result set in the proc 
    results = cursor.fetchallDict() 
    cursor.close() 
    return results 

Faites-moi savoir si cela ne fonctionne pas.

Questions connexes