Flask+SQLite3でWeb-DBアプリ開発!をちょっとだけ試してみる

日経ソフトウェア誌2019年3月号に掲載された、清水美樹氏による記事、『Python向けフレームワーク Flask+SQLite3でWeb-DBアプリ開発! ~「蔵書管理データベース」で基本をマスターしよう~』は良い記事でした。本稿では、さわりの部分を紹介します。詳しい説明と最後までやってみたい方は、雑誌を入手してみてください。

開発環境の準備

Flask(フラスク)は、プログラミング言語Python用の、軽量なウェブアプリケーションフレームワークです。Anacondaに同梱されています。
まず、Anacondaのサイトからインストーラをダウンロードします。サイトの上部左の”Products”から”Individual Edition”をクリック、「Download」ボタンをクリックして下にスクロール、Windows、MacOS、Linuxから選択します。Python3.X系を選択して下さい。

Linuxの場合

ダウンロードしたシェルを実行します。

$ ls
Anaconda3-2020.02-Linux-x86_64.sh
$ bash ./Anaconda3-2020.02-Linux-x86_64.sh

途中、インストーラが確認してくるので、yes/no/Enterなどを押して対話的にインストールを進めます。途中で以下のように初期化するかを聞いてくる箇所があり、筆者は”yes”を選択しました。

Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
[no] >>> yes

インストールが完了したら、動作確認をします。なお、上記初期化の選択で”no”を選択した場合は、別途パスを通す必要があります。

$ source ~/.bashrc
$ conda -V
conda 4.8.2

Jupyter notebookを起動してみます。

$ jupyter notebook

MacOS、Windowsの場合

GUIベースでインストールできます。

Flaskで初めてのWebアプリ開発

適当な場所に作業フォルダを作成します。

mkdir flask-test

エディタを起動し、上記のフォルダに移動して、”hello.py”ファイルを作成、以下のコードを入力します。

from flask import Flask
myapp = Flask(__name__)

@myapp.route('/')
def index():
    return 'こんにちは'

Webサーバを起動してコードを実行

ターミナルから次の環境変数を設定します。

MacOS,Linux

export FLASK_APP="hello.py"
export FLASK_ENV="development"

Windows(PowerShell)

$env:FLASK_APP="hello.py"
$env:FLASK_ENV="development"

Webサーバを立ち上げます。

flask run

ブラウザからWebサーバにアクセスします。

http://localhost:5000/

ブラウザに「こんにちは」と表示されます。

PythonでSQLite3を操作してみる

エディタで”sqltest.py”を作成。以下のコードを入力。これは、SQLite3によってDBの作成、レコードの追加、レコードの選択を実施するコードです。

import sqlite3

CREATE_TABLE = '''create table books
(id integer primary key autoincrement,
author text,
title text)'''

TEST_INSERT = '''insert into books (title, author)
VALUES ('プリンキピア','ニュートン')
'''
TEST_SELECT = "select * from books"

conn = sqlite3.connect('testdb.sqlite3')
c = conn.cursor()
c.execute(CREATE_TABLE)
c.execute(TEST_INSERT)
conn.commit()
c.execute(TEST_SELECT)
result = c.fetchone()
print(result)
conn.close()

次のコマンドを実行します。

python sqltest.py

次のように表示されます。

(1, 'ニュートン', 'プリンキピア')

データベースのファイル(testdb.sqlite3)が作成されていることを確認します。

MacOS,Linux

$ ls -l
total 32
-rw-r--r-- 1 apple staff 453 5 22 16:48 sqltest.py
-rw-r--r-- 1 apple staff 12288 5 22 16:48 testdb.sqlite3

Windows(PowerShell)

> ls


    ディレクトリ: C:\works\flask\flask-test


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2020/05/21     18:08            472 sqltest.py
-a----       2020/05/21     18:08          12288 testdb.sqlite3