2017-09-14 5 views
0

私はPythonでは比較的新しいですが、Javaの経験が豊富です。ほとんどの概念を理解しています。しかし、私はMySQLの問題を持ち続け、MySQL を使った関数から情報を渡して、後で別の関数で使用します。Pythonのmysqlの出力が機能しない

複数の戻りフィールドを持つ複雑なMySQLクエリを作成する必要があるため、SQLフィールドごとに複数のSQLクエリを実行したくないので、データベースが破損する可能性があります。 以下は私が達成しようとしているものの小さな例だと言っています。

私は、他の場所からパラメータを取得したSQLクエリ(def connory_mysql())を実行する機能を望んでいました。(この部分は動作します)、SQLクエリの出力を受け取り、使用するメイン関数に戻ります。 main関数は、異なるパラメータに対してSQLクエリの異なるカラム結果を使用する必要があります。

私は結果を返すことができますが、表示され、印刷時に辞書のように見えるresult1に割り当てることができますが、私は別のキーやデータをresult1 = connector_mysql(subSerialNum、ldev、today_date ) 返す前にSQL関数の辞書のキーを分割すると、ldev_cap = result ['ldev_cap'] SQL関数内の個々の要素を出力できます...しかし、パラメータを渡すことはできませんメイン関数に分割し、それらを分割する??

私は簡単に何かを見逃している必要がありますか何かを理解していないです...どのような援助やヘルプをいただければ幸いです...

...  
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() 

を任意のヘルプや支援が大幅に

... apricatedされるだろう

乾杯 グラハム

答えて

0

まずは、Python style guideのPythonコードを書いてください。

既存のコードに基づいて、result1は、値(ldev_cap, ldef_usdcap)(ディレクトリではありません)を含むタプルとして返します。戻り値ldev_usdcapに対応するldev_capまたはresult1[1]の戻り値に対応する戻り値の結果には、result1[0]という名前でアクセスできます。

次の2つのデータを返しているので、また、あなたが

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

を使用して、各戻り値のデータにアクセスすることができますバックフィードのおかげで、私はそのていないディレクトリが、辞書を理解し、はいタプル概念を理解私は試してみましたが、うまく動作しませんでした。 – Graham

+0

あなたの質問を言い換えるべきでしょう。返された結果から何を期待していますか?正確には「うまくいかない」とは何ですか? – hcheung

関連する問題