1

このモデルを考えると:

from typing import Optional

from sqlmodel import SQLModel, Field


class SongBase(SQLModel):
    name: str
    artist: str = Field(index=False)
    #label: Optional[str] = Field(None, index=False)
    year: Optional[int] = Field(None, index=False)


class Song(SongBase, table=True):
    id: int = Field(default=None, primary_key=True, index=False)


class SongCreate(SongBase):
    pass

を使用して最初の Alembic リビジョンを作成し、alembic revision --autogenerate -m "init"それを を使用して適用しますalembic upgrade head

labelここで、フィールドのコメントを外して実行しますalembic revision --autogenerate -m "label"。私の移行は次のように表示されます。

revision = '083a8e84f047'
down_revision = 'c1b2ad7d0a39'
branch_labels = None
depends_on = None


def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.add_column('song', sa.Column('label', sqlmodel.sql.sqltypes.AutoString(), nullable=True))
    op.alter_column('song', 'id',
               existing_type=sa.INTEGER(),
               nullable=True,
               autoincrement=True)
    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.alter_column('song', 'id',
               existing_type=sa.INTEGER(),
               nullable=False,
               autoincrement=True)
    op.drop_column('song', 'label')
    # ### end Alembic commands ###

alembic が id フィールドを変更しようとするのはなぜですか? sqlmodel/alembic を評価して、本番環境のワークロードに適しているかどうかを確認しようとしていますが、これらの主キー操作を取り除くためにマイグレーションを手動で処理する必要があることは、私には少し危険に思えます。alembic がこのように主キー フィールドを編集するようにするには、何か問題がありますか?

編集:開示のために、モデルはこの記事/例から来ています: https://github.com/testdrivenio/fastapi-sqlmodel-alembic

4

1 に答える 1