Python で MySQL に接続してリスト表示し、任意の値を取得
Python という万能に近いプログラミング言語で「何やってんだ !?」という声が聞こえそうな気がしないでもないが、揶揄されても仕方がない古色蒼然・旧態依然のアプリケーションを造っている。
そして。たったこれだけのことをやるのに、まる二日間を費やした。※Python を自習し始めて2週間
テーブルの取得元がMySQL データベースというのが最大のポイント。
初期の目標達成に2週間もかかったのか、2週間で出来たのか
「これだけ」とはいえ、Pythyon を自習し始めてわずか2週間でここまでやれたという達成感がある。
当初は「1月中にできるかなぁ・・・」だったので嬉しくて仕方がない。
見た目は Access のリストボックスコントロールに過ぎないので不満がないこともない。
しかし、PySimpleGUI の Table Widget では、選択した行のマウスカーソルで示す列(カラム)の値が取得可能となっているのが最大の違い。データシート表示が出来ないことを補完しているともいえる。
もちろんこれだけでは最終目標達成まで全然機能が足りないが、やりたかった目標の第一歩である。
ちなみに Pythonは「パイソン」で、 PySimpleGUI は「パイシンプルグーイ」と発音するようだ。
さらにちなみに「パイソン」とは生物(大蛇)名のようだが、命名の理由はおそらくB級ビデオ作品の大蛇のニックネームから来ていると思われる。※「モンティ・パイソン」かもしれないが・・・
新しい言語の習得は手品のタネ明かしのようなもの
MySQL のテーブル処理にまる二日間費やしたが、大きな第一歩になった。
書いたプログラムは次のとおり。「トライアンドエラー」そのものの七転八倒の苦行だった。
義務教育で英語の授業を9年間も受けてもほとんどの日本人が英語で会話ができないように、 Pythyon の学習が目的で基本知識から入っていたなら挫折の連続で終わってしまい到底実現しなかっただろう。
目的が明確だからモチベーションが落ちず、エラーのたびにその原因を調べることの繰り返しでたどり着いた。
終わってみれば、専用ライブラリのおかげとはいえ、良くもこんな短いプログラムで実現出来たもんだと感慨深い。
import PySimpleGUI as SG
SG.theme("Default1")
import mysql.connector
try:
CN=mysql.connector.connect(
user="paradox",host="192.168.1.20",password="パスワード",database="sample"
)
print("-- MySQL接続OK ( ゚∀゚)v --")
except:
print("接続失敗")
# MySQL のデータ取得
SQL =("SELECT ID,氏名,電話番号,メールアドレス FROM 人名簿マスタ limit 50")
cursor=CN.cursor()
cursor.execute(SQL)
#DATA=cursor.fetchone() # 1行のみ取得
#DATA=cursor.fetchone() # 次行に移動
DATA=cursor.fetchall() # 全レコードを取得
CN.close
見出 = ['ID','名前','電話番号','メルアド']
列幅 = [4,12,12,30]
L=[
[SG.Table(key="-リスト-",headings= 見出,col_widths=列幅,values=list(DATA),justification="left",
num_rows=20,auto_size_columns=False,enable_click_events=True)],
[SG.Text("選択した項目:"),
SG.Text(key="-選択値-",size=40,font=("Helvetica",11,"bold"),text_color="blue",background_color="lightyellow")],
[SG.Button("OK",key="OK"),SG.Button("閉じる",key="Cancel")],
]
window=SG.Window("PySimpleGUI 練習",L,resizable=True,
location=(1400,200))
while True:
event,values=window.read()
print(event,values)
if event=="Cancel":
break
if "-リスト-" in event and "+CLICKED+" in event:
列番=event[2][1]
カラム名=見出[列番]
選択行=event[2][0]
選択項目値=DATA[選択行][列番]
window["-選択値-"].update(カラム名 +" : "+ str(選択項目値))
else:
continue
CN.close
#SG.Window.close()
苦労の原因を忘れないために、順次記事に残すことにする。
コメント