FlaskでMySQLを使う方法

image Flask

今回はSQLAlchemyを使ってFlaskでMySQLを使う方法を紹介します。

必要なライブラリをインストール

pip3 install SQLAlchemy
pip3 install PyMySQL
pip3 install cryptography

インストールしたライブラリについて

SQLAlchemy

Python用のORMライブラリです。

直接SQL文を書かなくてもSQLの操作ができるようになります。

PyMySQL

Python用のMySQLドライバです。

PythonでMySQLを使うには必ず必要です。

PyMySQLの代わりにmysqlclient等他のドライバを使うこともできます。

cryptography

暗号化ライブラリです。

MySQLのドライバにPyMySQLを使う場合は必須になります。

接続・モデルの作成

Flaskのメインの処理が書かれているapp.pyではなく新しく次のようにdatabase.pyを作ってデータベースの設定とモデルの設定を行います。

ルート/
  |-app/
    |-app.py
  |-models/
    |-database.py
    |-__init__py

database.py

from sqlalchemy import create_engine, Column, Integer, String ,Text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm.exc import NoResultFound
import cryptography

engine = create_engine('mysql+pymysql://{ユーザー名}}:{パスワード}@{ローカルホスト}/{DB名}?charset=utf8')

db = declarative_base()

class Posts(db):
    __tablename__ = "post" #テーブル名
    post_id = db.Column(Integer(), primary_key=True)
    title = db.Column(String(225),unique=True)
    body = db.Column(Text)

Session = sessionmaker(bind=engine)
db_session = Session()
db.metadata.create_all(engine)

今回はタイトル,本文,IDを記録するモデルをpostとして設定しました。

ターミナルでルートフォルダに移動してPython3を開きdatabase.pyのdbをインポートすることでMySQLに実際にテーブルを作成することができます。

from models.database import db

一行目にDataTime等を追加することで他の型も使うことができるようになります。

app.pyで利用

app.pyで次のようにdbをインポートすることで利用できるようになります。

from models.database import db_session,Posts

データを追加

data = Posts("Title","Body")
db_session.add(data)
db_session.commit()

データの取得

全件取得

data = db_session.query(Posts).all()

dataに入ったデータはfor文で一つずつ取り出すことができます。

条件指定

data = db_session.query(Posts).filter_by(title="Title").one()

データの削除

data = db_session.query(Posts).filter_by(title="Title").one()
db_session.delete(data)
db_session.commit()

最後までありがとうございました!

ビスケットを送る

コメント

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