ちょっとサボっていたらあっという間に一ヶ月近く空いてしまっていた・・・(;`ー´)
この間いろいろ課題があり、あまり精神的余裕がなかった上に、全然PVが上がらない Pythyon + PySimpleGUI のお勉強も止まっていたが、気にせずぼちぼち再開していく。
奈良県の片田舎から大阪市内のデータベース・サーバーに接続
コマンド入力ゼロ!!GUIツールだけでリモートデータベース接続に成功!!
ついにここまでたどり着いたので、記事未完のまま嬉しくて公開してしてます。(´∀`)
もちろん後日追記予定。
代わり映えしない画面なのだが、実はこれは奈良県北部にある自宅のPCから大阪市内までVPN接続で表示している。
しかも、ここに達するまで固有情報登録以外は一切のコマンド入力なしで !!
テーブルデータは、MySQLに付属のサンプルデータベース”sakila”での接続テスト中。
すべてをGUIだけでやるのだと頑なに決意はしていたが、そんなアホなことを紹介・解説しているサンプルなど全然見つからず、自助努力も限界に近づいて来ていてさすがにギブアップしかけていた。
PySimpleGUIのおかげでデスクトップアプリケーションは実現したが、問題はその先のリモート接続。
この一ヶ月間ずっと課題だった。悩み苦しんでいたのだが、答えにたどり着いたら何と半日弱で出来てしまった。
ひょっとしたら永遠の課題になるかも、と懸念していたのが・・・
Pythonアプリケーションから遠方(WAN)のデータベースへのリモート接続
いまどき、どんなに小規模な業務であってもファイル共有や会議を始めとする自宅からのリモート操作が必須なのは当たり前。しかし、データベースは話が別。
リモート接続の必須条件であるVPNルータ設置や固定IPアドレス取得が事実上不可能という、資金不足を含めた職場環境のハンディで悩んでいた。自分でコスト負担するつもりはさらさらないし・・・(*´~`*)
シンプルに、自宅から職場のPCにリモートアクセスするだけなら誰でもやってるだろうし、自分でも便利なフリーウェアのおかげで既に実現しているのだが、データベース接続となると要求レベルが全然異なる。
「カネがないなら知恵を絞るしかない」ので、この一ヶ月間悶々としていたのだが灯台もと暗しだった。
以前の職場でオモチャにしたことがある SoftEther VPN を思い出したのだった。
名前のとおりソフトウェアのみでVPNを実現出来る画期的プロジェクトだが、当時の職場環境では必要性がなかったしレスポンスもイマイチだったため、ちょっといじっただけで忘れてしまっていた。
そして、ちょっと調べてみたら相変わらず改良を重ねてすごい進化をしていることが分かった。その名は
VPN Azure (ブイピーエヌアジュール)
無料なのにGUIだけでカンタンにインストールも設定も出来てしまう。
まさに「サルでも出来る」といっても過言ではない使いやすさである。
何しろ、ネットワーク知識が極小の自分でもVPNサーバーとクライアントのインストールから接続成功まで1時間もかからなかったのである。もちろんレスポンスは少し犠牲になっているはずだがやってみないと分からない。
IPアドレス管理の問題があって拠点間VPNではないが、外部から接続するのは自分だけなので問題なし。
何でもっと早く気づかなかったのか。いや、それでも早めに気づいて本当に良かった。
SoftEtherプロジェクトの筑波大学研究メンバーさんに本当に感謝です。(´∀`)
冒頭のサンプルデータは自宅から遠く離れた、接続時点では無人のオフィスに設置しているPC内のMySQLサーバーから取得している。そしてほとんどストレスなく問題なく実現出来ている。
期限ギリギリまで関わりたくない Windows11 だが、中古PC購入で導入済みだったので仕方なく流用中。
いずれは ubuntu サーバーにするつもりだが、今は手っ取り早く職場内の既存のPCでトライしてみた。
ただし、Windows標準機能だけでは画像のようなWANでのリモートデスクトップ接続は出来ない。
短時間でここまでこれたのはあらかじめ自宅から遠隔地のWindowsPC間を別の手段(フリーウェア)で接続していた環境上でSoftEtherVPNサーバーを「自宅からインストール」出来たため。
そのおかげで午後にMySQLサーバーとWorkbenchをインストールしてから1時間もたたずにこのサンプルデータに接続出来たのである。しかもまったくコマンド入力なしで。まさに快挙や。(´∀`)
ソフトウェアVPNでリモートデータベースが実用になるのか??
・・・という疑問については、現在の利用条件では問題なく実用的レスポンスが確保出来ている。
何しろソフトだけで構成されたVPN。最初の接続はさすがに2~3秒くらいかかっているが接続後はストレスなく動作している。つまり当面の用途ではまったく問題ない。
しかし、翌日は打って変わってローカルDBに近い瞬速レスポンスになったので嬉しい驚きとなった。
とにかく大して高度な用途ではないし、接続ユーザーもごく少人数。秘匿性のあるデータを扱うわけでもないのでセキュリティ対策も重視していない。※やろうとしても大したスキルもないし・・・(;`ー´)
だらだらとシリーズにしていたPythonのプログラムはDB接続部分を少し手直ししただけで済んでいる。
リスト(タプル)変数の活用でちょっとだけ進歩したコードの冒頭部分も載せておこう。
# SQL文で使用するカラム名を見出として設定
見出=("FID","title","description","category","price","length","rating")
列幅 = [4,24,50,12,8,4,8] # カラムに対応した列幅設定
テーブル名=" from film_list "
# --- データベースとテーブル名に依存するのはここまで (´∀`)
ウィンドウタイトル="リモートDB演習"
SQLカラム="" # SQL文のカラム名を生成する
for N in range(0,len(見出)): #見出要素の数の回数を繰り返す
SQLカラム=SQLカラム+str(見出[N])
if N<len(見出)-1: # 見出要素の数より少なければカンマを付加
SQLカラム=SQLカラム + ","
SQL_MAIN="SELECT "+ SQLカラム + テーブル名
コメント