Python+MySQLでストアドプロシージャの実行(最後)〜SQLAlchemyでプロシージャを実行した結果はtupleのリストになってしまう
ここまで続いてきた失敗だらけの履歴。
pythonのフレームワークはbottle、ORマッパーはSQLAlchemyを使用。
・「Python+MySQLでストアドプロシージャの実行」
・「Python+MySQLでストアドプロシージャの実行(続き)〜複数結果の取得はcursor.nextset()で順次取得」
今回で最後(だと思う)。
ここまででpythonからmysqlで作成したストアドプロシージャを呼び出して戻り値を得ることが出来たが、最後の画面表示部分でエラーとなっていた。
現段階での結論だと、次の処理が必要。面倒・・・。
タイトルにも書いたが、SQLAlchemyでプロシージャを実行した結果はtupleのリストになってしまうので、自分でdictionaryを作成して値をそれに詰め替え、最後にValuesViewに変換したものをリストに詰め込む必要がある。
細かなところは別として、流れは次のような感じ。
url = 'mysql+pymysql://' + 'ユーザ名' + ':' + 'パスワード'+ '@' + 'DBホスト名' + '/' + 'DB名?charset=utf8' engine = dbMapper.create_engine(url, echo=False) connection = engine.raw_connection() try: # Query実行 cursor = connection.cursor() cursor.callproc("ストアドプロシージャ名", [ストアドプロシージャの変数名]) resultList = [] while true: # cursor.fetchall()の実行結果はtuple result = list(cursor.fetchall()) # tupleの実行結果だと表示できないので、OrderDictに詰め替える cursorResultDict = OrderedDict() cursorResultDict['実行結果のカラム名1'] = result[0][0] cursorResultDict['実行結果のカラム名2'] = result[0][1] # OrderDictのリストだとmappingされずに実行結果を表示できないので、values()関数でValuesViewのリストに変換する resultList.append(cursorResultDict.values()) isNext = cursor.nextset() if isNext == None: break finally: cursor.close() connection.close() return resultList