ビジネスパーソン・ガジェット置場 empty lot for business

営業や仕事、それに伴う生活を便利に楽にするツール、ガジェットを作ります。既にあるツールも自分用にカスタマイズ。

python: Flaskアプリの作成⑩ dbのmigration

備忘録です。

今回はデータベースへテーブルの追加、修正などのやり方についての備忘録です。

db

ターミナル操作でマイグレーションを行いプッシュする

 

その1 新たにテーブルを作成

自分の抱えているプロジェクトを管理する機能をアプリケーションにつけるために、プロジェクトを登録できるようにデータベースのテーブルを作成します。

 

# app.py

# プロジェクト用モデル
class Project(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    p_title = db.Column(db.String(255))
    p_content = db.Column(db.Text)
    p_status = db.Column(db.Integer)
    p_crated_at = db.Column(db.DateTime, default=datetime.now(pytz.timezone('Asia/Tokyo')))
    p_completed_at = db.Column(db.DateTime)

プロジェクトのタイトルと概要、ステータス、作成日時、完了日時を登録する予定で上記のようなモデルを作成しました。

 

これまでにデータベース自体は作成しているので、そのデータベースに新たにテーブルを追加する形になります。

 

その2 データベースにプッシュする

作成したテーブルをデータベースにプッシュするにはflask_migrateというライブラリを使用します。

※これはapp.py作成時に既にimportしていますが、まだインポートしていない場合は下記を追加してインポートします。

 

# app.py

from flask_migrate import Migrate

 

次に、ターミナルで次の手順で実行していきます。(仮想環境で実行します)

# initは1回目だけで、2回目以降はmigrate→upgradeの順で実行します
$ flask db init
$ flask db migrate -m 'コメント'
$ flask db upgrade

 

開発しているフォルダ内にmigrationsというフォルダが出来上がります。

フォルダ内にversionsという項目でmigrateするときに記述したコメント名のファイルが出来上がっています。

 

ファイルにupgrade関数があり今回プッシュしたテーブルが出来上がっているのが確認できます。

 

xxxxxxxxxx_コメント.py

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table('project',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('p_title', sa.String(length=255), nullable=True),
    sa.Column('p_content', sa.Text(), nullable=True),
    sa.Column('p_status', sa.Integer(), nullable=True),
    sa.Column('p_crated_at', sa.DateTime(), nullable=True),
    sa.Column('p_completed_at', sa.DateTime(), nullable=True),
    sa.PrimaryKeyConstraint('id')
    )
    # ### end Alembic commands ###

 

 

修正後、migrateする際にエラーが結構多発していたのでエラーが出たごとに対処した方法ままた備忘録で書いていきます。