我想添加一个自动增量列,它不是现有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`);
其中col1
,col2
是不可为空的列。当我插入此记录时,我希望该表能自动为我生成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命令建立迁移吗?