Alembicのアップグレード中にデータを変更する必要があります。
現在、最初のリビジョンに「プレーヤー」テーブルがあります。
def upgrade():
op.create_table('player',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.Unicode(length=200), nullable=False),
sa.Column('position', sa.Unicode(length=200), nullable=True),
sa.Column('team', sa.Unicode(length=100), nullable=True)
sa.PrimaryKeyConstraint('id')
)
「チーム」テーブルを紹介したいと思います。2つ目のリビジョンを作成しました。
def upgrade():
op.create_table('teams',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(length=80), nullable=False)
)
op.add_column('players', sa.Column('team_id', sa.Integer(), nullable=False))
2回目の移行で次のデータも追加してください。
チームテーブルに入力します。
INSERT INTO teams (name) SELECT DISTINCT team FROM players;
players.teamの名前に基づいて、players.team_idを更新します。
UPDATE players AS p JOIN teams AS t SET p.team_id = t.id WHERE p.team = t.name;
アップグレードスクリプト内で挿入と更新を実行するにはどうすればよいですか?
op.execute
inupgrade()
に渡したい場合、alembic revision
コマンドが使用するデフォルトのテンプレート(生成された.py
ファイルのデフォルトの本文)を提供する方法はありますか?