2017-08-22 8 views
0

を返すためのMySQLコネクタ/パイソンを取得できませんタプルのリストとして標準出力を返します。私は、コネクタのバージョン2.1.7を使用していますので、ドキュメントは、カーソル宣言にはそうのように、私は、私は私の見解からMySQLのストアドプロシージャを呼び出すてるしたPythonアプリケーションを、持っている辞書

dictionary=True 

を追加すると、行セットは、各辞書のキーとしてカラム名で、辞書のリストとして返されることがなければならないと言います。私のアプリケーションとドキュメントの例の主な違いは、cursor.callproc()を使用しているのに対して、実際のsqlコードではcursor.execute()を使用している点です。

私はそのように列名を得ることができるかどうかを確認するために

print(cursor.column_names) 

を試してみましたが、私が得るすべてはより多くのストアドプロシージャへの入力パラメータのように見える

('@_audit_report_arg1', '@_audit_report_arg2', '@_audit_report_arg3', '@_audit_report_arg4', '@_audit_report_arg5', '@_audit_report_arg6', '@_audit_report_arg7') 

です。

実際に返されるデータの列名を取得する方法はありますか?このプロシージャは多少複雑でクロス集計型の操作を含みますが、MySQL Workbenchから同じストアドプロシージャを呼び出すと列名がうまく供給されます。

通常、出力が想定されていることを知っているので、最後の数行のデータをクロス集計する以外は列名をハードコードすることができ、クエリの実行後に何が行われるか予測できません。 ありがとう...

+0

https://stackoverflow.com/a/5058950/7383995これはあなたを助けるかもしれません! –

+0

Thanks @ legend-is-backですが、助けにはなりませんでした。その記事はPython 3をサポートしていないMySqlDbの記事です。私はmysql connector/Pythonを使用しています。私がcursor.descriptionを印刷すると、次のように表示されます:[( '@ _check_register_report_arg1'、250、None、None、None、1、0)、( '@ _check_register_report_arg2'、250、None、None、None、None、 0)など。カラム名はなく、パラメータに関する情報のみ。 – RMittelman

+0

Python 3を使用している場合は、pymysqlを使用することをお勧めします。私はPython 3にはoymsyqlを使用し、2,7にはmysqldbを使用し、両方で動作する解決策を提供します –

答えて

0

python3でpymysqlを使うことができます。

import pymysql.cursors 
connection = pymysql.connect(host='', 
          user='', 
          password='', 
          db='test', 
          charset='utf8mb4', 
          cursorclass=pymysql.cursors.DictCursor) 

try: 
    with connection.cursor() as cursor: 
     # Read a single record 
     sql = "query" 
     cursor.execute(sql) 
     result = cursor.fetchone() 
     num_fields = len(cursor.description) 
     field_names = [i[0] for i in cursor.description] 
     print (field_names) 
finally: 
    connection.close() 
+0

それは魅力的でした。今度は、{'EnrollmentStatus': '継続'、 '金額':小数点( '1732.00')、 'CkNo':71515、 'CheckTo': '学校'、 'C​​kDate':datetime.datetime(2015、 「FedPgmName」:「DL Subsidized」、「AwardYear」:「1516」、「StudentName」:「xxx redacted xxx」:「Diagnostic Medical Sonography I」、「FedPgmID」:8、 '' '' '' '' '' '' 'xxxxxxxxx' '' SchedDate '':datetime.datetime(2015,7,15,0,0)、 'CampusName': 'xxxx-xx-xxxx'、 'PayPeriod' 'メイン'}。完璧! – RMittelman

+0

やや奇妙な:私はこれを私のサーバーコンソールで/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pymysql/cursors.py:99:警告:(1292、不適切な日付の値: '2015-07-16 23:59:59'列1の '_toDate'列) self._do_get_result() それはすべてのことについてはわかりませんが、警告のみですOK、そう? – RMittelman

関連する問題