Flask-SQLAlchemyの基本的な使い方。MySQLを使います

Flask-SQLAlchemyの基本的な使い方について簡単に紹介します。

公式のチュートリアルとは異なりMySQLを使います。

基本事項

バージョン等

  • Python 3.6.0

Flask-SQLAlchemyとは

Flask-SQLAlchemyはFlaskからSQLAIchemyを簡単に使いやすくしたものです。

SQLAlchemyとはかなり簡単に言うとPythonからのDBとのやり取りをかなり簡単に行うためのツールです。
オブジェクト指向とデータベースをうまく繋げるORM(Object-relational mapping)を採用しています。
良くも悪くもSQL文を直接書かないでもDBとやり取りができます。

インストール方法

インストール方法はpipを使えば簡単です。

pip install -U Flask-SQLAlchemy

基本的な操作例

ここでは、基本的なFlask-SQLAlchemyの操作方法を紹介します。

まずは必要なモジュールのimportとFlaskのアプリを初期化します。

# -*- coding: utf-8 -*-

from flask import Flask, request
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.dialects.mysql import INTEGER, VARCHAR   # MySQLのテーブルを作る時に必要

app = Flask(__name__)

データベースへの接続

まずはじめにデータベースに接続します。

# MySQLに接続するための情報
app.config["SQLALCHEMY_DATABASE_URI"] = 'mysql+pymysql://{user}:{password}@{host}/{db_name}?charset=utf8'.format(**{
      'user': "test",
      'password': "test_pass",
      'host': "localhost",
      'db_name': "test_db"
  })
# おまじない
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

# dbの初期化
db = SQLAlchemy(app)

MySQLの設定は app.config のSQLALCHEMY_DATABASE_URIに書いていきます。
app.config にDBの設定を書いたらSQLAlchemyでDBの初期化をします。

テーブルの作成

テーブルを作成していきます。テーブルはモデルと同様の構成になりますので、Classを定義する要領で指定することができます。以下のコードで定義します。

class Memo(db.Model):
    """
        Memoモデルの定義
    """
    __tablename__ = "memos"

    id = db.Column("id", INTEGER(11), primary_key=True)
    memo = db.Column("memo", VARCHAR(255), nullable=True)

# テーブルの生成
db.create_all()

テーブルの変数は db.Column で定義できます。恐らくsqlが多少わかる人であればどのようなテーブルを設定しているかはわかると思います。

Classの定義を終えたら db.create_all() を実行することでDBにテーブルが作成されます。

INSERT:レコードの追加

INSERTの処理を実装します。
Flaskを使うのWebアプリっぽく実装します。
ここでは、POSTリクエストが来たらその値をDBに保存するような処理を書いてみます。

@app.route("/insert", methods=["POST"])
def insert():
    # postの受け取り
    memo_txt = request.form["memo"]
    # Memoの生成
    memo = Memo(memo=memo_txt)
    # MemoをDBに反映
    db.session.add(memo)
    db.session.commit()

テーブルにレコードを追加する時には、まず先程定義したClassでインスタンスを作成します。
そしてそのインスタンスを db.session.add() にいれることでテーブルに追加できます。
addした後にdbに変更を反映させるために db.session.commit() を行います。これでレコードが追加できました。

試しに上記のコードを試したい場合、ここまでのコード貼り付けて普通に実行してWebサーバーを起動させて、以下のコマンドでPOSTリクエストを送ってください。

curl -d "memo=test_memo" -X POST http://127.0.0.1:5000/insert 

SELECT:レコードの取り出し

レコードを取り出してみます。
ここでは、GETリクエストがあればすべてのレコードを返却するようにしてみます。

@app.route("/select", methods=["GET"])
def select():
    memos = Memo.query.all()
    return memos

レコードすべてを取り出す時は簡単でquery.all()を実行すればすべてのレコードを取ってこれます。
良くも悪くもsqlを書かなくても良いので簡単です。

終わりに

今回はFlask-SQLAlchemyの基本的な使い方について紹介しました。
私も初心者なので間違い等があるかもしれません。
もしあれば教えていただければと思います。

参考文献

ゼロからFlaskがよくわかる本: Pythonで作るWebアプリケーション開発入門

https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/

https://study-flask.readthedocs.io/ja/latest/flask_sqlalchemy.html#select

タイトルとURLをコピーしました