EXCEL VBAやPHP、Query、Ajaxに関するWINDOWS・WEBプログラミングの解説ブログです。

レンタルサーバーでpython FLASK運用、mySQLその1select,insert,update

メジャーレンタルサーバエックスサーバーにpythonのマイクロフレームワークFlaskをインストールし、mySQLを操作してみました。
XサーバーでFlaskを運用するには、PHPのようにファイルを放り込んだら良いというものではありませんので、環境の構築のために、SSHでサーバ接続し、諸々の事前が準備が必要です。私の環境構築は、参考になるか分かりませんが、動画にしてあります。
Flaskは、2020年現在大人気のプログラミング言語pythonでWEBアプリケーションを構築するためのフレームワークです。pythonのWEBフレームワークとしては、FlaskとDjangoがよく知られているようですが、Flaskは小規模、Djangoは大規模向けのようです。Flaskは、学習する上でのハードルも低いようですので、私も日常の仕事があるため、学習時間は限られておりFlaskを学習することにしました。始めたばかいですが、pythonフレームワークFlask面白い!と感じましたね。

パッケージの確認

pythonおよびFlaskからmySQLを操作するために、いくつかのパッケージが必要です。Flask, Flask-MySQL, Jinja2, mysql-connector-pythonこのあたりのパッケージは必要ですので、無ければpip3 install でインストールしないといけません。下の画像のように、pip3 list で確認したところ、私のXサーバー環境は以下のパッケージをインストールしてあります。

アップロードするファイル

ドメイン直下のpublic_htmlにtest1/デイレクトリを作成し、3つのファイルをアップロードしました。
.htaccessと、index.cgi、pythonファイルであるindex.pyです。index.cgiの属性は755にします。
また、HTMLのテンプレートファイルを利用しますので、デイレクトリtemplateも作成し、その中に、HTMLのテンプレートファイルhello.html、kaiin.htmlをアップロードしました。次にファイルの中身を説明していきます。

.htaccess

このようにすることで、https://ドメイン/test1/index.cgi でも https://ドメイン/test1/  でも同じ内容がブラウザに表示されます。

index.cgi

from index  のindexがindex.pyのpythonファイル名になります。
/home/XサーバのサーバーID/.linuxbrew/bin/python3はXサーバ内のpythonの格納されている場所を指しています。
それ以外は、定型文として、そのまま流用できます。

index.py

いよいよpythonファイルです。一行目のrender_templateは、テンプレートの呼び出しに使います。import mysql.connector はmySQLを利用するために必須です。

@app.route(‘/’) ブラウザアドレスバーがルートの場合の処理です。
URLとして、https://ドメイン/test1/ あるいは https://ドメイン/test1/index.cgi と打つと、下画像のようにHello world!が表示されます。

@app.route(“/hello”)
URLとして、https://ドメイン/test1/hello あるいは https://ドメイン/test1/index.cgi/hello と打つと、下画像のように表示されます。render_templateの名前通り、./templates/hello.htmlに引数として、titleとsubtitleを与えます。

hello.htmlの中身です。htmlファイルの中でpythonを使うことができます。PHPで言うところの<?= ?>のようなものでしょうか。

mysqlと接続、selectで一件のレコードを取得・表示

以下のようなテーブルを準備しておきます。フィールドはid,name,ageの三つのみです。

pythonファイル index.pyにmySQLと接続するための記述を3行目以降追記します。
MySQLユーザ、パスワード、MySQLが動いているサーバー、データベース名 の記述が必要です。

@app.route(“/select”)以下にURLが、https://ドメイン/test1/select と打たれた場合の処理を記述します。

@app.route(“/select”)抜粋①カーソルを取得します②kaiin_tableのidが103の会員情報を取得するSQL文を実行します。③SQLの結果を配列にします。

URLとして、https://ドメイン/test1/select あるいは https://ドメイン/test1/index.cgi/select として打つと、下画像のように表示されます。

selectで全件のレコードを取得・配列のまま表示

@app.route(“/selects1”)以下にURLが、https://ドメイン/test1/selects1 と打たれた場合の処理を記述します。テーブルの全件のレコードを取得し、配列のままブラウザに表示させます。result = cursor.fetchall()で、SELECT文の結果を配列としてresultに格納しています。

URLとして、https://ドメイン/test1/selects1 と打つと、下画像のように表示されます。当たり前ですが、SQL文の結果が配列のまま表示されます。ちょっと退屈ですね。

selectで全件のレコードを取得・1レコードづつ表示

@app.route(“/selects2”)以下にURLが、https://ドメイン/test1/selects2と打たれた場合の処理を記述します。テーブルの全件のレコードを配列として取得し、要素を一つづつブラウザに表示させます。for文で配列の要素を順番に取り出しています。

URLとして、https://ドメイン/test1/selects2 と打つと、下画像のように表示されます。面白くなってきましね。

selectで全件のレコードを取得・配列をテンプレートHTMLファイルに渡して、HTMLファイルで要素として一つづつ表示

@app.route(“/selects3”)以下にURLが、https://ドメイン/test1/selects3と打たれた場合の処理を記述します。テーブルの全件のレコードを取得し、配列のままテンプレートHTMLファイルkaiin.htmlに渡します。kaiin.htmlファイル内で、配列から要素を一つづつ順番に取り出し、ブラウザに表示させます。

kaiin.htmlの中身です。htmlファイルの中でpythonを使うことができます。for user in kaiin の箇所です。

URLとして、https://ドメイン/test1/selects3 と打つと、下画像のように表示されます。かなり、面白くなってきましたね?

update文で、会員情報を更新

@app.route(“/update”)以下にURLが、https://ドメイン/test1/updateと打たれた場合の処理を記述します。idが103の会員の年齢を更新します。update文を実行した後、connector.commit()をしないとデータが保存されないので、注意が必要です。

URLとして、https://ドメイン/test1/update と打つと、SQL文が実行、データベースに保存された後、updateと表示されます。

URLとして、https://ドメイン/test1/selects3 と打つと、更新を確認することができます。面白いです!

insert文で、会員情報を登録

@app.route(“/insert”)以下にURLが、https://ドメイン/test1/insertと打たれた場合の処理を記述します。山田花子をさんの情報を追加するためのinsert文を実行した後、connector.commit()をしないとデータが保存されないので、注意が必要です。

URLとして、https://ドメイン/test1/insert と打つと、SQL文が実行、データベースに保存された後、insertと表示されます。

URLとして、https://ドメイン/test1/selects3 と打つと、更新を確認することができます。面白いです!

2020年9月の四連休以降、時間を見つけてpythonというかFlask勉強していますが、とても面白いです!はまりそうです!