2017-09-14 5 views
0

Je suis relativement nouveau à Python, mais ont plus d'expérience en Java, donc je comprends la plupart des concepts. Cependant, je continue à avoir des problèmes avec MySQL et transmettre des informations depuis une fonction en utilisant MySQL à utiliser dans une autre fonction plus tard.sortie Python mysql de la fonction ne fonctionne pas

que je dois faire des requêtes MySQL complexes avec de multiples champs de retour, donc je ne veux pas être en cours d'exécution multiples requêtes SQL pour chaque champ SQL comme ce écraserons la base de données. Dire que ce qui suit est un petit exemple de ce que j'essaie d'accomplir.

Je voulais une fonction pour exécuter une requête SQL (def connectory_mysql()) qui prenait des paramètres d'ailleurs, (cette partie fonctionne) puis prenait la sortie de la requête SQL et revenait à la fonction principale à utiliser. La fonction principale doit ensuite utiliser les différents résultats de colonne de la requête SQL pour différents paramètres.

Je peux renvoyer le résultat et l'affecter à un résultat1 qui apparaît et ressemble à un dictionnaire à l'impression, mais je suis incapable de diviser/utiliser les différentes clés ou données du result1 = connector_mysql (subSerialNum, ldev, today_date) Si je splituse les clés du dictionnaire dans la fonction SQL avant de revenir à savoir ldev_cap = résultat [ « ldev_cap »] je peux imprimer les éléments individuels au sein de la fonction SQL ... Cependant, je ne peux pas l'air de passer les paramètres puis retour à la fonction principale et les séparer?

Je dois avoir manqué quelque chose de facile ou je ne pas comprendre quelque chose ... toute aide ou de l'aide serait grandement appréciée ...

...  
result1 = connector_mysql(subSerialNum, ldev, today_date) 

print(result1) #this works and appears to be a dictionary, but I can split it 
       ## into its elements like: 
ldev_cap = result1['ldev_cap'] ##-> this dosn't work here.....???? if i return it as a dictonary.. 
       #and i'm unsure how to split them when i pass just the paramaters 
       #back if i split the dictionary in the sql function. 

... 

def connector_mysql(subSerialNum, ldev, today_date): 

    import pymysql.cursors 

    db_server = 'localhost' 
    db_name = 'CBDB' 
    db_pass = 'secure_password' 
    db_user = 'user1' 

    sql_query = (
     "SELECT ldev_cap, ldev_usdcap FROM Ldevs WHERE sub_serial=%(serial)s " 
     "and ldev_id=%(lun)s and data_date=%(todayD)s") 

    connection = pymysql.connect(host=db_server, 
           user=db_user, 
           password=db_pass, 
           db=db_name, 
           cursorclass=pymysql.cursors.DictCursor) 

    try: 
     with connection.cursor() as cursor: 
      cursor.execute(sql_query, {'serial': subSerialNum, 'lun': ldev, 'todayD': today_date}) 
      result = cursor.fetchone() 

      while result: 
       ldev_cap = result['ldev_cap'] #here the dictionary acts as 
             #expected and i can assign a value 
       ldev_usdcap = result['ldev_usdcap'] 

       print(result) 
       return ldev_cap, ldev_usdcap #here i can return 

    finally: 
     connection.close() 

Toute aide ou assistance serait grandement apricated ...

A bientôt Graham

Répondre

0

Tout d'abord, vous devriez vous familiariser avec le Python style guide pour l'écriture de code python.

En fonction de votre code existant, result1 renvoie sous la forme d'un tuple contenant la valeur (ldev_cap, ldef_usdcap) (ce n'est pas un répertoire). Vous avez accès au résultat de retour comme result1[0] qui correspondant à la valeur de retour de ldev_cap ou result1[1] qui correspondant à la valeur de retour de ldev_usdcap.

Alternativement, puisque vous revenez deux données, vous pouvez accéder à chaque donnée de retour à l'aide

ldev_cap, ldev_usdcap = connector_mysql(subSerialNum, ldev, today_date) 
+0

Merci pour le feed-back, je comprends son pas un répertoire mais un dictionnaire, et oui comprendre le concept de tuple qui J'ai essayé mais ne fonctionne pas. – Graham

+0

Peut-être que vous devriez reformuler votre question, qu'est-ce que vous attend du résultat ce retour? et qu'est-ce qui ne fonctionne pas exactement? – hcheung