FlaskのColumnをstringからfloatに変更
FlaskのMigrate機能を使ってStringカラムにFloatカラム変更しようとした際に、ハマったので記事にします。
まず初めに、以下の通りカラム変更を行う想定でいました。
しかし、StringからFloatへの型変更はmigrate機能で対応していないようです。
#String (20)として定義している
price = db.Column(db.String(20), index=True)
↓
# Float型に変更
price = db.Column(db.Float, index=True)
仕方なく、以下の方法で対応しました。
1. 空のリビジョンファイルを生成
flask db revision
2.空のリビジョンファイルが作成されると、以下が記述されたファイルが生成されます。
def upgrade():
pass
def downgrade():
pass
3.それを以下のように変更して、直接tableを修正する変更を行いました。
def upgrade():
op.execute("alter table table_name modify price float;")
def downgrade():
op.execute("alter table table_name modify price varchar(20);")
この辺りはテーブル定義で将来を見据えて設計することが望ましいと思いますが、途中で変更せざる追えない場合もあると思います。
そういった場合は、参考にしてもらえればと思います。
※注意点
データベースは「MySQL」を対象としています。
ORMを利用するメリットとして、データベースの種類に依存しない書き方ができることですが、この例外設定を行うと、特定のデータベースに依存しますので、複数種のデータベースを利用していたり、将来変更する予定がある場合は、注意が必要です。
そもそも、途中でカラム変更しなければ影響ないですけどね!!
この記事が気に入ったらサポートをしてみませんか?