審判ファンの文系SEがFlaskでプロ野球審判出場記録アプリを作る⑧【Python】【Flask】【sqlite3】
レギュラーシーズンが終わった
Flaskでなんかコネクションがうまくいかなくて「もういやだ…なんでうまくいかないの…?」と若干病んでいる内にレギュラーシーズンが終わってしまいました。早い。今月は受講しているさとう式リンパケアの課題動画も撮らないといけないし、研修は終わらせないといけないし、友達の結婚式に参列する際に訪問着を着ようと思っているので二重太鼓の結び方の練習もしなくちゃいけないし、何よりこのプロ野球審判出場記録アプリをなんとか日本シリーズが終わる前に形にしたいので大変!プロ野球を見ている場合ではありません。
散々、タイトルで「Flaskで~」と言っておきながらFlaskについて書くのは今回が初めてな気がします。Flaskが何たるかは他の方が分かりやすく解説しているのでここでは割愛して詰まったところを書いていこうと思います。
コネクションをどうするか問題
球団別、ポジション別の試合数や平均試合時間など元のデータベースからSELECTすることが多いので、使いやすいように辞書型に格納したりしていましたが、別のページだと同じ変数は使えないし、データベースのコネクションをずっと開きっぱなしにしているとエラーが出てしまうのでどうしようかずっと悩んでいました。CLASSを使って共通のコネクションを使えば~とかも考えたのですが、エラーになってしまったので、
①データベースからSELECTしてreturnするファイル(DB.py)
②①をFlaskのinit.pyに読み込み
③DB.pyのクラスをインスタンス化
④クラス内に記載されている関数に引数を渡して呼び出し
という作戦でうまくいきました。
①のDB.pyはこんな感じ
class umpire_deta:
#プレーオフの出場試合審判をSELECTする関数
def CS(self,year):
#コネクションを定義
con4 = sqlite3.connect(DATABASE,check_same_thread=False)
#カーソルを定義
cur4 = con4.cursor()
#CSの出場審判、日本シリーズの出場審判をselect
CS_list = cur4.execute("select * from umpire__"+ year +" where コード = 'CS'").fetchall()
nihon_list = cur4.execute("select * from umpire__"+ year +" where コード = '日本シリーズ'").fetchall()
#カーソルとコネクションを閉じます
cur4.close()
con4.close()
return CS_list,nihon_list
init.pyの一部
#CSと日本シリーズの審判員を表示するページ
@app.route('/CS_nihon',methods=["GET","POST"])
def CS_nihon():
#GETされた時の処理
if request.method=="GET":
#とりあえず去年のを表示させときます
year = str(int_today_year - 1)
#DB.pyのクラスをインスタンス化
H = ex.umpire_list()
#引数を渡します
CS_list = H.CS(year)[0]
nihon_list = H.CS(year)[1]
return render_template("CS_nihon.html",CS=CS_list,nihon=nihon_list,year=year)
これでHTML側で表示させればいい感じになります。
おや!?なんか一気にそれらしくなっていますね!?適当にググってテーブルをCSSで飾り付け、フォントをグーグルのフォントのやつにしてみました。ただコピペしただけなので全くCSSが何たるかに触れていませんがそれは細かいデザインが気になったときにやるとして、とりあえず表に出せる形に仕上げようと思います。
本当は色々url_forの書き方とかもまとめたかったのですがまた次回にします。
この記事が気に入ったらサポートをしてみませんか?