buto > /dev/null

だいたい急に挑戦してゴールにたどり着かずに飽きる日々です

Python DBデータを取得する

Flask+jinja2+MySQLでちょっとした画面を作る

お手軽WebフレームワークFlaskでMySQLに登録したデータを表示する画面を作ってみる!

環境構築

  1. MySQLをインストール
    • brew install mysql
    • brew services start mysql
    • mysql -uroot
    • クライアントツールはMySQL Workbenchを利用
    • クライアントツールからスキーマ、テーブル、データを作成
  2. Pythonライブラリをインストール ※PyPI最新版を利用
    • Flask
    • jinja2
    • pymysql データ取得だけでは使わなかった
    • sqlalchemy

MySQLに接続する

ソースコードGitHub

ファイル構成 - config.py:DB接続情報を記述 - database.py:セッションを取得 - models/item.py:itemテーブルのモデルクラス データ取得メソッドを記述 - main.py:item.pyのデータ取得メソッドを呼び、HTMLを返す

f:id:butorisa:20201020172428p:plain

database.py SQLAlchemyを使ってMySQLの接続セッションを確立

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from config import SystemConfig


def create_session():
    # create_engine()の引数はconfig.pyに記述したDB接続情報
    engine = create_engine(SystemConfig.SQLALCHEMY_DATABASE_URI)
    session = sessionmaker(bind=engine)
    return session()

item.py database.pyからセッションを取得し、データを取得

import database as db
from sqlalchemy import (Column, Integer, String)
from sqlalchemy.ext.declarative import declarative_base


base = declarative_base()


class Item(base):
    # テーブル情報
    __tablename__ = 'item'
    no = Column(Integer, primary_key=True, autoincrement=True)
    title = Column(String(100), nullable=False)
    content = Column(String(1000), nullable=False)

    def get_item(self):
        """ itemテーブルの全データを取得 """
        session = db.create_session()
        item_list = session.query(Item).all()
        if item_list is None:
            return []
        return item_list

session.query(モデルクラス)でデータ取得できる!!