#目次
0.この記事を書いた経緯
1.対象読者
2.環境
3.手順
4.苦労した点
5.まとめ
6.参考サイト
#0-この記事を書いた経緯
前回記事の続編になります。
この記事を読むと、WEBから値をSQL Serverに登録して作成したDBの値をPythonで取り出して表示することができるようになります。
#1-対象読者
前回記事を読んだ方
SQL ServerとPythonの接続方法を知りたい方
SQLAlchemyを使用した簡単なWEBアプリを作成してみたい方
今回作成するアプリは**「交通費精算アプリ」**です!
※なお今回はDBのチューニングは考えないこととしています。
#2-環境
Python 3.9.4
Flask 1.1.2
SQLAlchemy 1.4.7
Flask-SQLAlchemy 2.5.1
SQL Server 2019 (Express)
SSMS(SQL Server Management Studio) 18.9(日本語版)
pyodbc 4.0.30
※すべてlocal環境(Windows10 64bit)で動作させています。
ソースコードエディタはVisual Studio Code(ver 1.57.1)
#3-手順
(1)環境構築
・「Python」,「SQL Server」,「SSMS(SQL Server Management Studio)」のインストール
(前回記事と同様)
・SQLserver構成マネージャーの設定
(前回記事と同様)
・下記のライブラリをpipでインストール
Flask
SQLAlchemy
Flask-SQLAlchemy
pyodbc
pip install ~
(2)コード・ディレクトリの用意
ディレクトリ構造は以下です。
├── python_sqlalchemy_R06
│ ├── static
| | └ design.css
│ └── templates
│ ├ delete_result.html
| ├ layout.html
| ├ result.html
| └ view.html
└── flask_app.py
コードは以下を参照してください。
https://github.com/wiskerpaddy/py_flask_heroku_template/tree/main/python_sqlalchemy_R06
コードの簡単な説明は以下です。
ファイル | 内容 |
---|---|
design.css | デザインを決めています。 |
delete_result.html | レコードを削除した際に遷移する画面です。 |
layout.html | すべてのhtmlファイルに共通する部分を記述しています。 |
result.html | レコードを追加した際に遷移する画面です。 |
view.html | アプリを立ち上げた際に最初に立ち上がる画面です。 |
flask_app.py | アプリを動かしているコードです。 |
(3)コードの内容
ローカルで**「flask_app.py」を実行して「http://127.0.0.1:5000/」**にアクセスします。アクセスすると以下の画面が立ち上がります。
列の説明
画面の列とDBの値の関係を説明します。以下のようにそれぞれ対応しています。
DBの項目 | 不正な値の例 | 置き換え後の値 |
---|---|---|
名前 | null | 名無し |
交通費 | 記号等の数値に変換不能な値,null | 0 |
日付 | dateフォーマットに変換不能な値,null | 9999-12-31 |
プロジェクトコード | null | 99999999 |
・削除
レコードを削除する際はURLフォームに「http://127.0.0.1:5000/delete/id」
と入力します。idには削除したい行のidを入力します。画面上では「22」を指定しています。指定したら「Enter」を押下します。
押下すると下記の画面に遷移します。
メニューに戻るとレコードが削除されているのが確認できます。
SSMSを立ち上げてテーブルを確認すると、対象レコードが削除されているのがわかります。
#4-苦労した点
不正な値を入力した際の、例外処理を考えるのが大変でした。
また「SQL Server」と「Python」を接続するコード(SQLAlchemyで言う「engine」)の作成が大変でした。ちなみに以下です。
connection_string ='DRIVER='+driver+';SERVER='+server+';DATABASE='+database+';PORT=1433;Trusted_Connection='+trusted_connection+';'
db_uri = URL.create('mssql+pyodbc', query={'odbc_connect': connection_string})
app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
db = SQLAlchemy(app)
#5-まとめ
次回はMS-SQLの代わりにPostgreSQLを実装して、heroku(サーバー)に上げることを想定したアプリを作成したいと思っています。
(いつやるかは未定です。)
何かと至らぬ点もあると思いますので、その際はアドバイスを頂けたら幸いです。