添加非主键的自动增量列Alembic

时间:2018-05-08 11:13:36

标签: python mysql python-3.x sqlalchemy alembic

我想添加一个自动增量列,它不是现有MySQL数据库的主键。

此操作所需的服务器上发出的命令如下:

ALTER TABLE `mytable` ADD `id` INT UNIQUE NOT NULL AUTO_INCREMENT FIRST

我面临的问题是如何通过Alembic迁移复制此表更改。我试过了:

from alembic import op
import sqlalchemy as sa

def upgrade():
    op.add_column('mytable', sa.Colummn('id', sa.INTEGER(), 
                  nullable=False, autoincrement=True)

但是当我尝试使用以下命令插入一行时:

INSERT INTO `mytable` (`col1`, `col2`) VALUES (`bar`);

其中col1col2是不可为空的列。当我插入此记录时,我希望该表能自动为我生成id。

ERROR 1364 (HY000): Field 'id' doesn't have a default value

如果我使用以下命令检查由Alembic自动生成的sql:

alembic upgrade 'hash-of-revision' --sql
对于给定的修订,它会吐出来:

ALTER TABLE mytable ADD COLUMN id INTEGER NOT NULL;

这意味着在生成迁移的sql时,Alembic或SQLAlchemy都会忽略autoincrement字段。

我有办法解决这个问题吗?或者我可以根据自定义sql命令建立迁移吗?

0 个答案:

没有答案