今回は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()
最後までありがとうございました!
リンク
コメント