【Python + Flask +SQLite】Flask(Model-①) : Flask-SQLAlchemy でDBに接続

Flask

Flask-SQLAlchemyについて

SQLAlchemyとは、python で用いられる ORM(OR マッパー の 1 つで、 SQL を直書きせずに DB を操作するライブラリで、Flask-SQLAlchemy は、 Flask に合わせて作られた SQLAlchemy です。

Flask-SQLAlchemy をインストール

作業しているところの仮想環境をアクティベートにする。

次に、必要なものをインストールする。

# flask sqlalchemy のインストール
pip install flask sqlalchemy
# flask migrate のインストール
pip install flask migrate 

※参照※
https://pypi.org/project/Flask-SQLAlchemy/
https://pypi.org/project/Flask-Migrate/

マイグレーションの手順

マイグレーションとは、プログラムのコードからデータベースにテーブルを作成・編集すること。

マイグレーションの手順

dbの設定を記載しているファイルを設定
# MAC, Linux の場合 ターミナル
export FLASK_APP=myapp.py
# コマンドプロンプトの場合
set FLASK_APP=myapp.py

例)

set FLASK_APP=migrate_model.py
set FLASK_ENV=development  ♯開発環境であることを設定(=変更内容が自動反映される)
flask db init
マイグレーションに必要なファイルを格納する
# migrations フォルダを作成。
flask db init 
# テーブルの設定を記載したファイルの内容を migrations フォルダに反映する
flask db migrate m "some message"
# migrations フォルダの内容を DB に登録する
flask db upgrade 

DBを操作するmigrateファイルの作成(migrate_model.py)-① DB接続

from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

#models.pyを配置しているファイルのパス
base_dir = os.path.dirname(__file__) 

# DataBaseの接続先を設定
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(base_dir, 'data.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# SQLAlchemy を扱うためのインスタンス作成
db = SQLAlchemy(app)

# migrate する DB を設定
Migrate(app,db ) 

※DBに接続するための設定について

参照先:
https://flask-sqlalchemy.palletsprojects.com/en/2.x/config/

SQLALCHEMY_DATABASE_URI
接続するDB の URI
Postgres:postgresql://username:password@localhost/mydatabase
MySQL:mysql://username:password@localhost/mydatabase 
Oracle: oracle://username:password@127.0.0.1:1521/sidname
SQLite: sqlite:////absolute/path/to/foo.db
SQLALCHEMY_TRACK_MODIFICATIONS
これをTrue にすると、 Flask SQLAlchemy がデータベースの変更を追跡管理して、
シグナルを発生するようになる。ただし、これを有効にすると追加のメモリが必要となる。
SQLALCHEMY_BINDS
複数のデータベースに接続する際に利用される
SQLALCHEMY_BINDS = {
             'users': 'mysqldb ://localhost/users'
             'appmeta': sqlite :////path/to/appmeta.db'
              }

DBを操作するmigrateファイルの作成(migrate_model.py)-② DBテーブルのクラスを定義(DBモデルの作成)

# モデルPersonの作成
class Persons(db.Model):
    # テーブル(テーブル名:persons)の作成
    __tablename__ = 'persons'  
    # カラムidを主キーとして作成
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.Text)
    age = db.Column(db.Integer)
   
    def __init__(self,name,age):
        self.name = name
        self.age = age
※参照※DBのカラム一覧 

クラスを使って、テーブルを作成し、データを挿入する(crud.py)

#crud.py
from model import db,Persons,app

man1=Persons('Taro',18)
man2=Persons('Jiro',17)
man3=Persons('Saburo',16)
with app.app_context():
    db.create_all() ♯テーブルを作成

    db.session.add_all([man1,man2]) #複数一緒に追加
    db.session.add(man3) #1つ追加

    db.session.commit()

作業フロー

pip install -U Flask-SQLAlchemy
pip install Flask-Migrate

※参照※
https://pypi.org/project/Flask-SQLAlchemy/
https://pypi.org/project/Flask-Migrate/

マイグレーションの手順
set FLASK_APP=myapp.py
set FLASK_ENV=development
flask run

python crud.py
——————————
マイグレーションレポジトリの作成
——————————
※Flask-Migrate は、flask db xx という flask のサブコマンドで操作します。

migrate_model.py作成

set FLASK_APP=migrate_model.py
flask db init

「migrartions」フォルダが作成される(初期化された状態)

flask db migrate -m “add Person”

「migrartions」フォルダに、マイグレートしたいファイルが作成される(DBモデルのPersonを追加)
「df74fb823e6f_add_person.py」

マイグレーションの内容をDBに反映させる
flask db upgrade

DBに「persons table」のほかに
「alenbic_version table」が作られた
———————————–
更新するとき
———————————–
「migrate_model.py」でDBモデルのクラスに
genderのカラムを追加して、DBに反映させるには
flask db migrate -m “add gender to person”

「migrartions」フォルダに、マイグレートしたファイルが作成される
「49cb3273214d_add_gender_to_person.py」

マイグレーションの内容をDBに反映させる
flask db upgrade

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